diff options
author | Tor Egge <tegge@vespa.ai> | 2024-01-05 14:05:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-05 14:05:52 +0100 |
commit | 7f7f60b6886bed1c40249a17c9c3b74778f51879 (patch) | |
tree | 01e4f95e9ce484fe8753b2699875b452bc1834cf | |
parent | 60ff766692ba9a9431afddd5e3ef09d135b213cf (diff) | |
parent | 24e353231d06cec523374a7e6d5edccdafc3d5a5 (diff) |
Merge pull request #29815 from vespa-engine/vekterli/allow-asan-combined-with-ubsan
Allow for combining ASan and UBsan instrumentation in same build
-rw-r--r-- | build_settings.cmake | 16 | ||||
-rw-r--r-- | defaults/src/vespa/CMakeLists.txt | 8 |
2 files changed, 14 insertions, 10 deletions
diff --git a/build_settings.cmake b/build_settings.cmake index 1e7ed08055c..4e972b3839e 100644 --- a/build_settings.cmake +++ b/build_settings.cmake @@ -6,10 +6,11 @@ if (EXISTS ${CMAKE_CURRENT_LIST_DIR}/vtag.cmake) endif() if (VESPA_USE_SANITIZER) - if (VESPA_USE_SANITIZER STREQUAL "address" OR VESPA_USE_SANITIZER STREQUAL "thread" OR VESPA_USE_SANITIZER STREQUAL "undefined") + if (VESPA_USE_SANITIZER STREQUAL "address" OR VESPA_USE_SANITIZER STREQUAL "thread" OR + VESPA_USE_SANITIZER STREQUAL "undefined" OR VESPA_USE_SANITIZER STREQUAL "address,undefined") message("-- Instrumenting code using ${VESPA_USE_SANITIZER} sanitizer") else() - message(FATAL_ERROR "Unsupported sanitizer option '${VESPA_USE_SANITIZER}'. Supported: 'address', 'thread' or 'undefined'") + message(FATAL_ERROR "Unsupported sanitizer option '${VESPA_USE_SANITIZER}'. Supported: 'address', 'thread', 'undefined' or 'address,undefined'") endif() endif() @@ -35,7 +36,7 @@ else() set(C_WARN_OPTS "-Winline ${C_WARN_OPTS}") endif() if (VESPA_USE_SANITIZER) - if (VESPA_USE_SANITIZER STREQUAL "address" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0) + if (VESPA_USE_SANITIZER MATCHES "address" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0) # Turn off maybe uninitialized and restrict warnings when compiling with # address sanitizer on gcc 12 or newer. set(C_WARN_OPTS "${C_WARN_OPTS} -Wno-maybe-uninitialized -Wno-restrict") @@ -84,10 +85,11 @@ else() endif() # Disable dangling reference and overloaded virtual warnings when using gcc 13 -# Disable stringop-oveflow and array-bounds warning when using gcc 13. +# Disable stringop-oveflow, stringop-overread and array-bounds warning when using gcc 13. +# The latter heuristics are sufficiently broken to be useless in practice. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "13") - set(CXX_SPECIFIC_WARN_OPTS "${CXX_SPECIFIC_WARN_OPTS} -Wno-dangling-reference -Wno-overloaded-virtual -Wno-stringop-overflow -Wno-array-bounds") + set(CXX_SPECIFIC_WARN_OPTS "${CXX_SPECIFIC_WARN_OPTS} -Wno-dangling-reference -Wno-overloaded-virtual -Wno-stringop-overflow -Wno-stringop-overread -Wno-array-bounds") endif() endif() @@ -101,7 +103,7 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O3 -fno-omit-frame-pointer ${C_WARN_OPTS # AddressSanitizer/ThreadSanitizer work for both GCC and Clang if (VESPA_USE_SANITIZER) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=${VESPA_USE_SANITIZER}") - if (VESPA_USE_SANITIZER STREQUAL "undefined") + if (VESPA_USE_SANITIZER MATCHES "undefined") # Many false positives when checking vptr due to limited visibility set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-sanitize=vptr") endif() @@ -198,7 +200,7 @@ if(VESPA_USE_SANITIZER) endif() # Dump stack when finding issues in unit tests using undefined sanitizer if(VESPA_USE_SANITIZER) - if(VESPA_USE_SANITIZER STREQUAL "undefined") + if(VESPA_USE_SANITIZER MATCHES "undefined") set(VESPA_SANITIZER_ENV "UBSAN_OPTIONS=print_stacktrace=1") endif() endif() diff --git a/defaults/src/vespa/CMakeLists.txt b/defaults/src/vespa/CMakeLists.txt index c2bf0de5b6b..e2bfbf3264b 100644 --- a/defaults/src/vespa/CMakeLists.txt +++ b/defaults/src/vespa/CMakeLists.txt @@ -12,11 +12,13 @@ function(vespa_configure_config_h) set(VESPA_USE_UNDEFINED_SANITIZER False) set(VESPA_HAS_IO_URING False) set(VESPA_HAS_EPOLL False) - if(VESPA_USE_SANITIZER STREQUAL "address") + if(VESPA_USE_SANITIZER MATCHES "address") set(VESPA_USE_ADDRESS_SANITIZER True) - elseif(VESPA_USE_SANITIZER STREQUAL "thread") + endif() + if(VESPA_USE_SANITIZER STREQUAL "thread") set(VESPA_USE_THREAD_SANITIZER True) - elseif(VESPA_USE_SANITIZER STREQUAL "undefined") + endif() + if(VESPA_USE_SANITIZER MATCHES "undefined") set(VESPA_USE_UNDEFINED_SANITIZER True) endif() if(NOT APPLE) |