@@ -70,7 +70,7 @@ set(DEFAULT_INCLUDE_DIRECTORIES)
7070
7171# ThreadSanitizer is incompatible with AddressSanitizer and LeakSanitizer
7272if (OPTION_BUILD_THREAD_SANITIZER AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" ))
73- set (DEFAULT_LIBRARIES -ltsan)
73+ set (SANITIZER_LIBRARIES -ltsan)
7474 set (TESTS_SANITIZER_ENVIRONMENT_VARIABLES
7575 "TSAN_OPTIONS=suppressions=${CMAKE_SOURCE_DIR} /source/tests/sanitizer/tsan.supp"
7676 )
@@ -79,11 +79,20 @@ if(OPTION_BUILD_THREAD_SANITIZER AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE
7979 )
8080elseif (OPTION_BUILD_MEMORY_SANITIZER AND "${CMAKE_CXX_COMPILER_ID} " MATCHES "Clang" AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" ))
8181 # TODO: This requires much more effort than expected: https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo
82- set (DEFAULT_LIBRARIES )
82+ set (SANITIZER_LIBRARIES )
8383 set (TESTS_SANITIZER_ENVIRONMENT_VARIABLES)
84- set (SANITIZER_COMPILE_DEFINITIONS)
84+ set (SANITIZER_COMPILE_DEFINITIONS
85+ "__MEMORY_SANITIZER__=1"
86+ )
87+ elseif (OPTION_BUILD_UB_SANITIZER AND "${CMAKE_CXX_COMPILER_ID} " MATCHES "Clang" AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" ))
88+ # TODO
89+ set (SANITIZER_LIBRARIES)
90+ set (TESTS_SANITIZER_ENVIRONMENT_VARIABLES)
91+ set (SANITIZER_COMPILE_DEFINITIONS
92+ "__UB_SANITIZER__=1"
93+ )
8594elseif (OPTION_BUILD_SANITIZER AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" ))
86- set (DEFAULT_LIBRARIES -lasan -lubsan)
95+ set (SANITIZER_LIBRARIES -lasan -lubsan)
8796 set (TESTS_SANITIZER_ENVIRONMENT_VARIABLES
8897 "LSAN_OPTIONS=verbosity=1:log_threads=1:print_suppressions=false:suppressions=${CMAKE_SOURCE_DIR} /source/tests/sanitizer/lsan.supp"
8998
@@ -100,11 +109,21 @@ elseif(OPTION_BUILD_SANITIZER AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BU
100109 "__ADDRESS_SANITIZER__=1"
101110 )
102111else ()
103- set (DEFAULT_LIBRARIES )
112+ set (SANITIZER_LIBRARIES )
104113 set (TESTS_SANITIZER_ENVIRONMENT_VARIABLES)
105114 set (SANITIZER_COMPILE_DEFINITIONS)
106115endif ()
107116
117+ if (WIN32 AND MSVC )
118+ # MSVC does not require to link manually the sanitizer libraries
119+ set (SANITIZER_LIBRARIES)
120+ endif ()
121+
122+ # Set default libraries
123+ set (DEFAULT_LIBRARIES
124+ ${SANITIZER_LIBRARIES}
125+ )
126+
108127#
109128# Compile definitions
110129#
@@ -220,6 +239,9 @@ if(WIN32 AND MSVC)
220239 add_compile_options (/fsanitize=address)
221240 elseif (OPTION_BUILD_MEMORY_SANITIZER AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" ))
222241 add_compile_options (/fsanitize=memory)
242+ add_compile_options (/fsanitize=leak)
243+ elseif (OPTION_BUILD_UB_SANITIZER AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" ))
244+ add_compile_options (/fsanitize=undefined)
223245 endif ()
224246endif ()
225247
@@ -275,6 +297,8 @@ if (PROJECT_OS_FAMILY MATCHES "unix")
275297 add_compile_options (-fsanitize=memory)
276298 add_compile_options (-fsanitize-memory-track-origins)
277299 add_compile_options (-fsanitize-memory-use-after-dtor)
300+ elseif (OPTION_BUILD_UB_SANITIZER AND "${CMAKE_CXX_COMPILER_ID} " MATCHES "Clang" AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" ))
301+ # TODO
278302 endif ()
279303endif ()
280304
0 commit comments