aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build_settings.cmake8
-rw-r--r--functions.cmake6
2 files changed, 14 insertions, 0 deletions
diff --git a/build_settings.cmake b/build_settings.cmake
index 272242ecc5c..1dfd55e7d0e 100644
--- a/build_settings.cmake
+++ b/build_settings.cmake
@@ -138,6 +138,14 @@ if(VALGRIND_EXECUTABLE)
set(VALGRIND_OPTIONS "--leak-check=yes --error-exitcode=1 --run-libc-freeres=no --track-origins=yes --suppressions=${VALGRIND_SUPPRESSIONS_FILE}")
set(VALGRIND_COMMAND "${VALGRIND_EXECUTABLE} ${VALGRIND_OPTIONS}")
endif()
+# Automatically set sanitizer suppressions file and arguments for unit tests
+if(VESPA_USE_SANITIZER)
+ if(VESPA_USE_SANITIZER STREQUAL "thread")
+ set(VESPA_SANITIZER_SUPPRESSIONS_FILE "${PROJECT_SOURCE_DIR}/tsan-suppressions.txt")
+ # Maximize the amount of history we can track, including mutex order inversion histories
+ set(VESPA_SANITIZER_ENV "TSAN_OPTIONS=suppressions=${VESPA_SANITIZER_SUPPRESSIONS_FILE} history_size=7 detect_deadlocks=1 second_deadlock_stack=1")
+ endif()
+endif()
if(VESPA_LLVM_VERSION)
else()
diff --git a/functions.cmake b/functions.cmake
index 65c02885ddb..b8ac3497ff2 100644
--- a/functions.cmake
+++ b/functions.cmake
@@ -428,6 +428,9 @@ function(vespa_add_test)
if(NOT VALGRIND_EXECUTABLE)
message(FATAL_ERROR "Requested valgrind tests, but could not find valgrind executable.")
endif()
+ if(VESPA_USE_SANITIZER)
+ message(FATAL_ERROR "Cannot run sanitizer-instrumented unit tests under Valgrind")
+ endif()
if(IS_SCRIPT)
# For shell scripts, export a VALGRIND environment variable
@@ -445,6 +448,9 @@ function(vespa_add_test)
set(ARG_COMMAND "${VALGRIND_COMMAND} ${COMMAND_FIRST} ${COMMAND_REST}")
endif()
endif()
+ if(VESPA_USE_SANITIZER AND VESPA_SANITIZER_ENV)
+ list(APPEND ARG_ENVIRONMENT "${VESPA_SANITIZER_ENV}")
+ endif()
separate_arguments(ARG_COMMAND)
add_test(NAME ${ARG_NAME} COMMAND ${ARG_COMMAND} WORKING_DIRECTORY ${ARG_WORKING_DIRECTORY})