From: khizmax Date: Sun, 5 Mar 2017 19:58:47 +0000 (+0300) Subject: [UBsan] Added macro CDS_SUPPRESS_SANITIZE for sanitizers to suppress some warnings X-Git-Tag: v2.3.0~139 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=a7ac009c667294a945686693e937909c96b017d4;p=libcds.git [UBsan] Added macro CDS_SUPPRESS_SANITIZE for sanitizers to suppress some warnings --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b8c923a..e1f1f47a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,7 +49,7 @@ endif(WITH_BOOST_ATOMIC) if(WITH_ASAN) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1 -fPIC -fsanitize=address,undefined -g -DCDS_ASAN_ENABLED -fno-omit-frame-pointer -fno-optimize-sibling-calls") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1 -fPIC -fsanitize=address,undefined -g -DCDS_ADDRESS_SANITIZER_ENABLED -fno-omit-frame-pointer -fno-optimize-sibling-calls") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O1 -fsanitize=address,undefined -g -DCDS_ASAN_ENABLED -fno-omit-frame-pointer -fno-optimize-sibling-calls") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address,undefined -pie") else() diff --git a/cds/compiler/clang/defs.h b/cds/compiler/clang/defs.h index daec9c73..49723b2b 100644 --- a/cds/compiler/clang/defs.h +++ b/cds/compiler/clang/defs.h @@ -116,6 +116,13 @@ # define CDS_THREAD_SANITIZER_ENABLED #endif +#if defined(__has_feature) && __has_feature(address_sanitizer) +# ifndef CDS_ADDRESS_SANITIZER_ENABLED +# define CDS_ADDRESS_SANITIZER_ENABLED +# endif +#endif + + // ************************************************* // Alignment macro diff --git a/cds/compiler/gcc/compiler_macro.h b/cds/compiler/gcc/compiler_macro.h index df538d9f..3d419f48 100644 --- a/cds/compiler/gcc/compiler_macro.h +++ b/cds/compiler/gcc/compiler_macro.h @@ -174,5 +174,13 @@ # endif #endif +// Sanitizer attributes +// Example: CDS_DISABLE_SANITIZE( "function" ) +#ifdef CDS_ADDRESS_SANITIZER_ENABLED +# define CDS_SUPPRESS_SANITIZE( ... ) __attribute__(( no_sanitize( __VA_ARGS__ ) )) +#else +# define CDS_SUPPRESS_SANITIZE( ... ) +#endif + #endif // #ifndef CDSLIB_COMPILER_GCC_COMPILER_MACRO_H diff --git a/cds/compiler/gcc/defs.h b/cds/compiler/gcc/defs.h index f7e3c403..0d8e5c45 100644 --- a/cds/compiler/gcc/defs.h +++ b/cds/compiler/gcc/defs.h @@ -125,6 +125,7 @@ # endif #endif + #include #endif // #ifndef CDSLIB_COMPILER_GCC_DEFS_H diff --git a/cds/compiler/icl/defs.h b/cds/compiler/icl/defs.h index 9417bd73..322f8aa5 100644 --- a/cds/compiler/icl/defs.h +++ b/cds/compiler/icl/defs.h @@ -161,6 +161,9 @@ # endif #endif +// Sanitizer attributes (not supported) +#define CDS_SUPPRESS_SANITIZE( ... ) + #include //@endcond diff --git a/cds/compiler/vc/defs.h b/cds/compiler/vc/defs.h index 028fef02..7d0b382d 100644 --- a/cds/compiler/vc/defs.h +++ b/cds/compiler/vc/defs.h @@ -175,6 +175,9 @@ # define CDS_ARCH_LITTLE_ENDIAN #endif +// Sanitizer attributes (not supported) +#define CDS_SUPPRESS_SANITIZE( ... ) + #include //@endcond diff --git a/cds/gc/details/retired_ptr.h b/cds/gc/details/retired_ptr.h index e5443704..85cfce6f 100644 --- a/cds/gc/details/retired_ptr.h +++ b/cds/gc/details/retired_ptr.h @@ -90,7 +90,7 @@ namespace cds { namespace gc { } /// Invokes destructor function for the pointer - void free() + void free() CDS_SUPPRESS_SANITIZE( "function" ) { assert( m_funcFree ); assert( m_p ); diff --git a/doxygen/cds.doxy b/doxygen/cds.doxy index 6bdae828..7af7f620 100644 --- a/doxygen/cds.doxy +++ b/doxygen/cds.doxy @@ -1400,7 +1400,8 @@ PREDEFINED = CDS_BUILD_BITS=64 \ CDS_NOEXCEPT=noexcept() \ CDS_CONSTEXPR=constexpr \ CDS_CXX11_INHERITING_CTOR \ - CDS_EXCEPTION_ENABLED + CDS_EXCEPTION_ENABLED \ + CDS_SUPPRESS_SANITIZE # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. diff --git a/test/unit/misc/asan_errors.cpp b/test/unit/misc/asan_errors.cpp index 0d991f66..17ebaa87 100644 --- a/test/unit/misc/asan_errors.cpp +++ b/test/unit/misc/asan_errors.cpp @@ -28,7 +28,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifdef CDS_ASAN_ENABLED +#ifdef CDS_ADDRESS_SANITIZER_ENABLED #include @@ -76,4 +76,4 @@ namespace { } } // namespace -#endif // #ifdef CDS_ASAN_ENABLED +#endif // #ifdef CDS_ADDRESS_SANITIZER_ENABLED