@@ -337,14 +337,31 @@ endfunction()
337337if (SANITIZER_ENABLE_LEGACY_SUPPORT OR USE_SANITIZER)
338338 set (SANITIZER_LEGACY_SUPPORT ON )
339339
340- set_sanitizer_options(address DEFAULT -fno-omit-frame-pointer)
341- set_sanitizer_options(leak DEFAULT -fno-omit-frame-pointer)
342- set_sanitizer_options(memory DEFAULT -fno-omit-frame-pointer)
343- set_sanitizer_options(memorywithorigins DEFAULT SANITIZER memory
344- -fno-omit-frame-pointer -fsanitize-memory-track-origins)
345- set_sanitizer_options(undefined DEFAULT -fno-omit-frame-pointer)
346- set_sanitizer_options(thread DEFAULT -fno-omit-frame-pointer)
347- set_sanitizer_options(cfi DEFAULT -fno-omit-frame-pointer)
340+ # The older variants used to add this flag, but since MSVC doesn't support it,
341+ # do a check and add it only if available
342+ set (QUIET_BACKUP ${CMAKE_REQUIRED_QUIET} )
343+ set (CMAKE_REQUIRED_QUIET TRUE )
344+ unset (SANITIZER_LEGACY_DEFAULT_COMMON_OPTIONS)
345+ check_cxx_compiler_flag(-fno-omit-frame-pointer
346+ SANITIZER_OMIT_FRAME_POINTER_AVAILABLE)
347+ set (CMAKE_REQUIRED_QUIET "${QUIET_BACKUP} " )
348+ if (SANITIZER_OMIT_FRAME_POINTER_AVAILABLE)
349+ set (SANITIZER_LEGACY_DEFAULT_COMMON_OPTIONS -fno-omit-frame-pointer)
350+ endif ()
351+
352+ set_sanitizer_options(address DEFAULT
353+ ${SANITIZER_LEGACY_DEFAULT_COMMON_OPTIONS} )
354+ set_sanitizer_options(leak DEFAULT ${SANITIZER_LEGACY_DEFAULT_COMMON_OPTIONS} )
355+ set_sanitizer_options(memory DEFAULT
356+ ${SANITIZER_LEGACY_DEFAULT_COMMON_OPTIONS} )
357+ set_sanitizer_options(
358+ memorywithorigins DEFAULT SANITIZER memory
359+ ${SANITIZER_LEGACY_DEFAULT_COMMON_OPTIONS} -fsanitize-memory-track-origins)
360+ set_sanitizer_options(undefined DEFAULT
361+ ${SANITIZER_LEGACY_DEFAULT_COMMON_OPTIONS} )
362+ set_sanitizer_options(thread DEFAULT
363+ ${SANITIZER_LEGACY_DEFAULT_COMMON_OPTIONS} )
364+ set_sanitizer_options(cfi DEFAULT ${SANITIZER_LEGACY_DEFAULT_COMMON_OPTIONS} )
348365
349366 set (USE_SANITIZER
350367 ""
0 commit comments