aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.ci/clang.sh2
-rw-r--r--.travis.yml4
-rw-r--r--CMakeLists.txt15
-rw-r--r--src/nvim/CMakeLists.txt10
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}