@@ -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