[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