Skip to content

Commit dd981c9

Browse files
committed
Update legacy defaults
The `-fno-omit-frame-pointer` flag is not available with MSVC, so instead perform a check the flag is available before adding it for default legacy sanitizer options.
1 parent 9a24999 commit dd981c9

File tree

3 files changed

+30
-15
lines changed

3 files changed

+30
-15
lines changed

.gitlab-ci.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ Windows/MSVC/Address Sanitizer:
602602
script:
603603
- cmake example/all/ -B build -GNinja -D EXAMPLE_USE_SANITIZER=address
604604
- ninja -C build
605-
- ninja -C build test ; if ($? -ne 0) { return 0 } else { return 1 }
605+
- ninja -C build test ; if ($? -ne 0) { exit 1 } else { exit 0 }
606606

607607
# Legacy Sanitizer
608608

@@ -674,7 +674,7 @@ Windows/MSVC/Address Sanitizer (LEGACY):
674674
script:
675675
- cmake example/all/ -B build -GNinja -D USE_SANITIZER=address
676676
- ninja -C build
677-
- ninja -C build test ; if ($? -ne 0) { return 0 } else { return 1 }
677+
- ninja -C build test ; if ($? -ne 0) { exit 1 } else { exit 0 }
678678

679679
macOS/AppleClang/ThreadSanitizer (LEGACY):
680680
variables:

example/all/CMakeLists.txt

+3-5
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,9 @@ target_code_coverage(lsanFail AUTO ALL)
6161
add_test(lsan lsanFail)
6262

6363
# Fails with AddressSanitizer
64-
if(EXAMPLE_USE_SANITIZER MATCHES "([Aa]ddress)")
65-
add_executable(asanFail ../src/asan_fail.cpp)
66-
target_code_coverage(asanFail AUTO ALL)
67-
add_test(asan asanFail)
68-
endif()
64+
add_executable(asanFail ../src/asan_fail.cpp)
65+
target_code_coverage(asanFail AUTO ALL)
66+
add_test(asan asanFail)
6967

7068
# Fails with MemorySanitizer
7169
add_executable(msanFail ../src/msan_fail.cpp)

sanitizers.cmake

+25-8
Original file line numberDiff line numberDiff line change
@@ -337,14 +337,31 @@ endfunction()
337337
if(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

Comments
 (0)