#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 */
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
--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) \
# 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) \
# 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) \