| // RUN: %clang_cc1 -triple x86_64-unknown-linux -DSANITIZER_ENABLED -fsanitize=address -fsanitize-address-field-padding=1 %s |
| // RUN: %clang_cc1 -triple x86_64-unknown-linux %s |
| static_assert(!__is_trivially_copyable(S)); |
| // Don't allow memcpy when the struct has poisoned padding bits. |
| // The sanitizer adds posion padding bits to struct S. |
| static_assert(sizeof(S) > 16); |
| static_assert(!__is_bitwise_cloneable(S)); |
| static_assert(sizeof(U) == sizeof(S)); // no padding bit for U. |
| static_assert(!__is_bitwise_cloneable(U)); |
| static_assert(!__is_bitwise_cloneable(S[2])); |
| static_assert(!__is_bitwise_cloneable(Derived)); |
| static_assert(sizeof(S) == 16); |
| static_assert(__is_bitwise_cloneable(S)); |
| static_assert(__is_bitwise_cloneable(U)); |
| static_assert(__is_bitwise_cloneable(S[2])); |
| static_assert(__is_bitwise_cloneable(Derived)); |