From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp34.i.mail.ru (smtp34.i.mail.ru [94.100.177.94]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 3F498469710 for ; Thu, 28 May 2020 23:42:33 +0300 (MSK) From: "Timur Safin" References: <645228196cb289f4bbf8e1df47f17ea958cd9237.1590622225.git.v.shpilevoy@tarantool.org> In-Reply-To: <645228196cb289f4bbf8e1df47f17ea958cd9237.1590622225.git.v.shpilevoy@tarantool.org> Date: Thu, 28 May 2020 23:42:30 +0300 Message-ID: <04a501d63530$81a0f500$84e2df00$@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Language: ru Subject: Re: [Tarantool-patches] [PATCH v2 03/10] cmake: add option ENABLE_UB_SANITIZER List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: 'Vladislav Shpilevoy' , tarantool-patches@dev.tarantool.org, alyapunov@tarantool.org, korablev@tarantool.org Very nice! LGTM! : -----Original Message----- : From: Vladislav Shpilevoy : Sent: Thursday, May 28, 2020 2:32 AM : To: tarantool-patches@dev.tarantool.org; alyapunov@tarantool.org; : korablev@tarantool.org; tsafin@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)