diff options
-rw-r--r-- | .ci/clang.sh | 2 | ||||
-rw-r--r-- | .travis.yml | 4 | ||||
-rw-r--r-- | CMakeLists.txt | 15 | ||||
-rw-r--r-- | src/nvim/CMakeLists.txt | 10 |
4 files changed, 21 insertions, 10 deletions
diff --git a/.ci/clang.sh b/.ci/clang.sh index 605a7647c8..5621c04e0c 100644 --- a/.ci/clang.sh +++ b/.ci/clang.sh @@ -22,7 +22,7 @@ if [ "$TRAVIS_OS_NAME" = "linux" ]; then export ASAN_SYMBOLIZER_PATH=$symbolizer export MSAN_SYMBOLIZER_PATH=$symbolizer export ASAN_OPTIONS="detect_leaks=1:log_path=$tmpdir/asan" - export TSAN_OPTIONS="external_symbolizer_path=$symbolizer:log_path=$tmpdir/tsan" + export TSAN_OPTIONS="external_symbolizer_path=$symbolizer log_path=$tmpdir/tsan" export UBSAN_OPTIONS="log_path=$tmpdir/ubsan" # not sure if this works CMAKE_EXTRA_FLAGS="-DTRAVIS_CI_BUILD=ON \ -DUSE_GCOV=ON \ diff --git a/.travis.yml b/.travis.yml index 687e8e89ee..a72ec56acc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,9 +27,11 @@ env: matrix: include: - os: linux - env: CI_TARGET=clang CLANG_SANITIZER=ASAN + env: CI_TARGET=clang CLANG_SANITIZER=ASAN_UBSAN - os: linux env: CI_TARGET=clang CLANG_SANITIZER=MSAN + - os: linux + env: CI_TARGET=clang CLANG_SANITIZER=TSAN - os: osx env: CI_TARGET=clang compiler: clang diff --git a/CMakeLists.txt b/CMakeLists.txt index 949ae163af..06db4f473e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -191,16 +191,21 @@ include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS}) find_package(LibVterm REQUIRED) include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS}) -option(CLANG_ASAN "Enable Clang address sanitizer for nvim binary." OFF) +option(CLANG_ASAN_UBSAN "Enable Clang address & undefined behavior sanitizer for nvim binary." OFF) option(CLANG_MSAN "Enable Clang memory sanitizer for nvim binary." OFF) -if(CLANG_ASAN AND CLANG_MSAN) - message(FATAL_ERROR "CLANG_ASAN and CLANG_MSAN cannot be enabled simultaneously.") +option(CLANG_TSAN "Enable Clang thread sanitizer for nvim binary." OFF) + +if((CLANG_ASAN_UBSAN AND CLANG_MSAN) + OR (CLANG_ASAN_UBSAN AND CLANG_TSAN) + OR (CLANG_MSAN AND CLANG_TSAN)) + message(FATAL_ERROR "Sanitizers cannot be enabled simultaneously.") endif() -if((CLANG_ASAN OR CLANG_MSAN) AND NOT CMAKE_C_COMPILER_ID MATCHES "Clang") + +if((CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN) AND NOT CMAKE_C_COMPILER_ID MATCHES "Clang") message(FATAL_ERROR "Sanitizers are only supported for Clang.") endif() -if(CLANG_ASAN OR CLANG_MSAN) +if(CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN) message(STATUS "Sanitizers have been enabled; don't use jemalloc.") else() find_package(JeMalloc) diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 19121ad8e7..41c7f34fc3 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -95,7 +95,7 @@ foreach(gen_cdef ${gen_cdefs} DO_NOT_DEFINE_EMPTY_ATTRIBUTES) list(APPEND gen_cflags "-D${gen_cdef}") endif() endforeach() -if(CLANG_ASAN) +if(CLANG_ASAN_UBSAN) list(APPEND gen_cflags "-DEXITFREE") endif() @@ -190,8 +190,8 @@ add_executable(nvim ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES} target_link_libraries(nvim ${NVIM_EXEC_LINK_LIBRARIES}) install_helper(TARGETS nvim) -if(CLANG_ASAN) - message(STATUS "Enabling Clang address sanitizer for nvim.") +if(CLANG_ASAN_UBSAN) + message(STATUS "Enabling Clang address sanitizer and undefined behavior sanitizer for nvim.") set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-DEXITFREE ") set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fno-sanitize-recover -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address -fsanitize=undefined ") set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=address -fsanitize=undefined ") @@ -199,6 +199,10 @@ elseif(CLANG_MSAN) message(STATUS "Enabling Clang memory sanitizer for nvim.") set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -fno-optimize-sibling-calls ") set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins ") +elseif(CLANG_TSAN) + message(STATUS "Enabling Clang thread sanitizer for nvim.") + set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fsanitize=thread ") + set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=thread ") endif() add_library(libnvim STATIC EXCLUDE_FROM_ALL ${NEOVIM_GENERATED_SOURCES} |