[Tarantool-patches] [PATCH v2 03/10] cmake: add option ENABLE_UB_SANITIZER
Timur Safin
tsafin at tarantool.org
Thu May 28 23:42:30 MSK 2020
Very nice!
LGTM!
: -----Original Message-----
: From: Vladislav Shpilevoy <v.shpilevoy at tarantool.org>
: Sent: Thursday, May 28, 2020 2:32 AM
: To: tarantool-patches at dev.tarantool.org; alyapunov at tarantool.org;
: korablev at tarantool.org; tsafin at tarantool.org
: Subject: [PATCH v2 03/10] cmake: add option ENABLE_UB_SANITIZER
:
: Clang has a built-in sanitizer for undefined behaviour. Such as
: wrong memory alignment, array boundaries violation, 0 division,
: bool values with non standard content, etc.
:
: The sanitizer emits runtime checks which lead to either crash, or
: a trap, or a warning print, depending on what is chosen.
:
: The patch makes it possible to turn the sanitizer on and catch
: UBs. The only supported UB so far is alignment check. Other types
: can be added gradually, along with fixing bugs which they find.
:
: The UB sanitizer is activated for ASAN builds in CI.
:
: Part of #4609
: ---
: .travis.mk | 3 ++-
: cmake/compiler.cmake | 10 ++++++++++
: 2 files changed, 12 insertions(+), 1 deletion(-)
:
: diff --git a/.travis.mk b/.travis.mk
: index 063537f25..748321f26 100644
: --- a/.travis.mk
: +++ b/.travis.mk
: @@ -114,7 +114,8 @@ coverage_debian: deps_debian
: test_coverage_debian_no_deps
:
: build_asan_debian:
: CC=clang-8 CXX=clang++-8 cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo \
: - -DENABLE_WERROR=ON -DENABLE_ASAN=ON ${CMAKE_EXTRA_PARAMS}
: + -DENABLE_WERROR=ON -DENABLE_ASAN=ON -DENABLE_UB_SANITIZER=ON \
: + ${CMAKE_EXTRA_PARAMS}
: make -j
:
: test_asan_debian_no_deps: build_asan_debian
: diff --git a/cmake/compiler.cmake b/cmake/compiler.cmake
: index ce3e7e506..373bcd3b0 100644
: --- a/cmake/compiler.cmake
: +++ b/cmake/compiler.cmake
: @@ -238,6 +238,8 @@ endif()
:
: option(ENABLE_WERROR "Make all compiler warnings into errors" OFF)
:
: +option(ENABLE_UB_SANITIZER "Make the compiler generate runtime code to
: perform undefined behaviour checks" OFF)
: +
: macro(enable_tnt_compile_flags)
: # Tarantool code is written in GNU C dialect.
: # Additionally, compile it with more strict flags than the rest
: @@ -263,6 +265,14 @@ macro(enable_tnt_compile_flags)
: "-Wno-strict-aliasing"
: )
:
: + if (ENABLE_UB_SANITIZER)
: + if (NOT CMAKE_COMPILER_IS_CLANG)
: + message(FATAL_ERROR "Undefined behaviour sanitizer only
: available for clang")
: + else()
: + add_compile_flags("C;CXX" "-fsanitize=alignment -fno-
: sanitize-recover=alignment")
: + endif()
: + endif()
: +
: if (CMAKE_COMPILER_IS_CLANG AND CC_HAS_WNO_UNUSED_VALUE)
: # False-positive warnings for ({ xx = ...; x; }) macroses
: add_compile_flags("C;CXX" "-Wno-unused-value")
: --
: 2.21.1 (Apple Git-122.3)
More information about the Tarantool-patches
mailing list