From d3468ea855d7f23f8cd6e1a570311ef57a7e004e Mon Sep 17 00:00:00 2001 From: Andrew Gallagher Date: Fri, 20 Sep 2013 04:28:39 -0700 Subject: [PATCH] folly: add a FOLLY_SANITIZE_ADDRESS macro to Portability.h Summary: Defines a macro to portably test whether address sanitizer is enabled across the different compilers we use. Test Plan: Compiled source file with address sanitizer and verified macro was defined. Reviewed By: delong.j@fb.com FB internal diff: D978196 --- folly/Portability.h | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/folly/Portability.h b/folly/Portability.h index 89d5199e..fe38d6b5 100644 --- a/folly/Portability.h +++ b/folly/Portability.h @@ -84,11 +84,24 @@ struct MaxAlign { char c; } __attribute__((aligned)); # endif #endif + +/* Define a convenience macro to test when address sanitizer is being used + * across the different compilers (e.g. clang, gcc) */ +#if defined(__clang__) +# if __has_feature(address_sanitizer) +# define FOLLY_SANITIZE_ADDRESS 1 +# endif +#elif defined (__GNUC__) && \ + (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) || (__GNUC__ >= 5)) && \ + __SANITIZE_ADDRESS__ +# define FOLLY_SANITIZE_ADDRESS 1 +#endif + /* Define attribute wrapper for function attribute used to disable * address sanitizer instrumentation. Unfortunately, this attribute * has issues when inlining is used, so disable that as well. */ -#if defined(__clang__) -# if __has_feature(address_sanitizer) +#ifdef FOLLY_SANITIZE_ADDRESS +# if defined(__clang__) # if __has_attribute(__no_address_safety_analysis__) # define FOLLY_DISABLE_ADDRESS_SANITIZER \ __attribute__((__no_address_safety_analysis__, __noinline__)) @@ -96,13 +109,10 @@ struct MaxAlign { char c; } __attribute__((aligned)); # define FOLLY_DISABLE_ADDRESS_SANITIZER \ __attribute__((__no_sanitize_address__, __noinline__)) # endif +# elif defined(__GNUC__) +# define FOLLY_DISABLE_ADDRESS_SANITIZER \ + __attribute__((__no_address_safety_analysis__, __noinline__)) # endif -#elif defined (__GNUC__) && \ - (__GNUC__ == 4) && \ - (__GNUC_MINOR__ >= 8) && \ - __SANITIZE_ADDRESS__ -# define FOLLY_DISABLE_ADDRESS_SANITIZER \ - __attribute__((__no_address_safety_analysis__, __noinline__)) #endif #ifndef FOLLY_DISABLE_ADDRESS_SANITIZER # define FOLLY_DISABLE_ADDRESS_SANITIZER -- 2.34.1