25
25
* See #include <sanitizer/asan_interface.h> in Clang for the source.
26
26
*/
27
27
28
- #if __has_feature (address_sanitizer ) || defined(__SANITIZE_ADDRESS__ )
28
+ #if defined(__clang__ )
29
+ # define QD_HAS_ADDRESS_SANITIZER __has_feature(address_sanitizer)
30
+ #elif defined (__GNUC__ ) && defined(__SANITIZE_ADDRESS__ )
31
+ # define QD_HAS_ADDRESS_SANITIZER __SANITIZE_ADDRESS__
32
+ #else
33
+ # define QD_HAS_ADDRESS_SANITIZER 0
34
+ #endif
35
+
36
+ #if QD_HAS_ADDRESS_SANITIZER
29
37
30
38
void __asan_poison_memory_region (void const volatile * addr , size_t size );
31
39
void __asan_unpoison_memory_region (void const volatile * addr , size_t size );
@@ -50,21 +58,21 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
50
58
#define ASAN_UNPOISON_MEMORY_REGION (addr , size ) \
51
59
__asan_unpoison_memory_region((addr), (size))
52
60
53
- #else // __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
61
+ #else // QD_HAS_ADDRESS_SANITIZER
54
62
55
63
#define ASAN_POISON_MEMORY_REGION (addr , size ) \
56
64
((void)(addr), (void)(size))
57
65
#define ASAN_UNPOISON_MEMORY_REGION (addr , size ) \
58
66
((void)(addr), (void)(size))
59
67
60
- #endif // __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
68
+ #endif // QD_HAS_ADDRESS_SANITIZER
61
69
62
70
// https://github.com/google/sanitizers/wiki/AddressSanitizer#turning-off-instrumentation
63
71
64
- #if defined( __clang__ ) || defined ( __GNUC__ )
72
+ #if QD_HAS_ADDRESS_SANITIZER
65
73
# define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address))
66
74
#else
67
75
# define ATTRIBUTE_NO_SANITIZE_ADDRESS
68
- #endif
76
+ #endif // QD_HAS_ADDRESS_SANITIZER
69
77
70
- #endif // __qd_asan_interface_h__
78
+ #endif // __qd_asan_interface_h__
0 commit comments