From 6a3eee476018db113b7d20688ca07f7ee8222b77 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Mon, 20 Feb 2017 23:30:55 +0300 Subject: [PATCH] Fix 'unknown attribute no_sanitize' compiler warning (clang prior to v3.8) * src/atomic_ops.h [!AO_ATTR_NO_SANITIZE_MEMORY && AO_MEMORY_SANITIZER] (AO_ATTR_NO_SANITIZE_MEMORY): Do not define to no_sanitize attribute unless clang-3.8+ (or not clang). * tests/test_atomic_include.template [AO_HAVE_storeXX && AO_MEMORY_SANITIZER && AO_PREFER_GENERALIZED] (test_atomicXX): Initialize x local variable (before AO_storeXX which can be defined using CAS); add comment. * tests/test_atomic_include.template [AO_HAVE_short_storeXX && AO_MEMORY_SANITIZER && AO_PREFER_GENERALIZED] (test_atomicXX): Initialize s local variable. * tests/test_atomic_include.template [AO_HAVE_char_storeXX && AO_MEMORY_SANITIZER && AO_PREFER_GENERALIZED] (test_atomicXX): Initialize b local variable. * tests/test_atomic_include.template [AO_HAVE_int_storeXX && AO_MEMORY_SANITIZER && AO_PREFER_GENERALIZED] (test_atomicXX): Initialize zz local variable. --- src/atomic_ops.h | 4 +++- tests/test_atomic_include.template | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/atomic_ops.h b/src/atomic_ops.h index 171f100..6f5f192 100644 --- a/src/atomic_ops.h +++ b/src/atomic_ops.h @@ -187,7 +187,9 @@ #endif #ifndef AO_ATTR_NO_SANITIZE_MEMORY -# ifdef AO_MEMORY_SANITIZER +# if defined(AO_MEMORY_SANITIZER) \ + && (!defined(__clang__) || __clang_major__ > 3 \ + || (__clang_major__ == 3 && __clang_minor__ >= 8)) # define AO_ATTR_NO_SANITIZE_MEMORY __attribute__((no_sanitize("memory"))) # else # define AO_ATTR_NO_SANITIZE_MEMORY /* empty */ diff --git a/tests/test_atomic_include.template b/tests/test_atomic_include.template index 12cceed..b6bcc18 100644 --- a/tests/test_atomic_include.template +++ b/tests/test_atomic_include.template @@ -61,6 +61,9 @@ void test_atomicXX(void) MISSING(AO_nop); # endif # if defined(AO_HAVE_storeXX) +# if defined(AO_MEMORY_SANITIZER) && defined(AO_PREFER_GENERALIZED) + *(volatile AO_t *)&x = 0; /* initialize to avoid MSan false warning */ +# endif AO_storeXX(&x, 13); TA_assert(x == 13); # else @@ -107,6 +110,9 @@ void test_atomicXX(void) --x; # endif # if defined(AO_HAVE_short_storeXX) +# if defined(AO_MEMORY_SANITIZER) && defined(AO_PREFER_GENERALIZED) + *(volatile short *)&s = 0; +# endif AO_short_storeXX(&s, 13); # else # if !defined(AO_HAVE_short_store) || !defined(AO_HAVE_short_store_full) \ @@ -146,6 +152,9 @@ void test_atomicXX(void) # endif TA_assert(*(volatile short *)&s == 13); # if defined(AO_HAVE_char_storeXX) +# if defined(AO_MEMORY_SANITIZER) && defined(AO_PREFER_GENERALIZED) + *(volatile char *)&b = 0; +# endif AO_char_storeXX(&b, 13); # else # if !defined(AO_HAVE_char_store) || !defined(AO_HAVE_char_store_full) \ @@ -184,6 +193,9 @@ void test_atomicXX(void) # endif TA_assert(*(volatile char *)&b == 13); # if defined(AO_HAVE_int_storeXX) +# if defined(AO_MEMORY_SANITIZER) && defined(AO_PREFER_GENERALIZED) + *(volatile int *)&zz = 0; +# endif AO_int_storeXX(&zz, 13); # else # if !defined(AO_HAVE_int_store) || !defined(AO_HAVE_int_store_full) \ -- 2.40.0