summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <tegge@vespa.ai>2024-01-05 14:05:52 +0100
committerGitHub <noreply@github.com>2024-01-05 14:05:52 +0100
commit7f7f60b6886bed1c40249a17c9c3b74778f51879 (patch)
tree01e4f95e9ce484fe8753b2699875b452bc1834cf
parent60ff766692ba9a9431afddd5e3ef09d135b213cf (diff)
parent24e353231d06cec523374a7e6d5edccdafc3d5a5 (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.cmake16
-rw-r--r--defaults/src/vespa/CMakeLists.txt8
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)