@@ -1609,7 +1609,12 @@ struct CStructNoUniqueAddress2 {
16091609 [[no_unique_address]] int two;
16101610};
16111611
1612- struct CStructAlignment {
1612+ struct alignas (64 ) CStructAlignment {
1613+ int one;
1614+ int two;
1615+ };
1616+
1617+ struct CStructAlignedMembers {
16131618 int one;
16141619 alignas (16 ) int two;
16151620};
@@ -1711,13 +1716,17 @@ void is_layout_compatible(int n)
17111716{
17121717 static_assert (__is_layout_compatible (void , void ), " " );
17131718 static_assert (!__is_layout_compatible (void , int ), " " );
1714- static_assert (! __is_layout_compatible (void , const void ), " " ); // FIXME: this is CWG1719
1715- static_assert (! __is_layout_compatible (void , volatile void ), " " ); // FIXME: this is CWG1719
1716- static_assert (! __is_layout_compatible (const int , volatile int ), " " ); // FIXME: this is CWG1719
1719+ static_assert (__is_layout_compatible (void , const void ), " " );
1720+ static_assert (__is_layout_compatible (void , volatile void ), " " );
1721+ static_assert (__is_layout_compatible (const int , volatile int ), " " );
17171722 static_assert (__is_layout_compatible (int , int ), " " );
1718- static_assert (!__is_layout_compatible (int , const int ), " " ); // FIXME: this is CWG1719
1719- static_assert (!__is_layout_compatible (int , volatile int ), " " ); // FIXME: this is CWG1719
1720- static_assert (!__is_layout_compatible (const int , volatile int ), " " ); // FIXME: this is CWG1719
1723+ static_assert (__is_layout_compatible (int , const int ), " " );
1724+ static_assert (__is_layout_compatible (int , volatile int ), " " );
1725+ static_assert (__is_layout_compatible (const int , volatile int ), " " );
1726+ static_assert (__is_layout_compatible (int *, int * __restrict), " " );
1727+ // Note: atomic qualification matters for layout compatibility.
1728+ static_assert (!__is_layout_compatible (int , _Atomic int ), " " );
1729+ static_assert (__is_layout_compatible (_Atomic (int ), _Atomic int ), " " );
17211730 static_assert (!__is_layout_compatible (int , unsigned int ), " " );
17221731 static_assert (!__is_layout_compatible (char , unsigned char ), " " );
17231732 static_assert (!__is_layout_compatible (char , signed char ), " " );
@@ -1758,10 +1767,11 @@ void is_layout_compatible(int n)
17581767 static_assert (!__is_layout_compatible (CppStructNonStandardByVirtBase, CppStructNonStandardByVirtBase2), " " );
17591768 static_assert (!__is_layout_compatible (CppStructNonStandardBySameBase, CppStructNonStandardBySameBase2), " " );
17601769 static_assert (!__is_layout_compatible (CppStructNonStandardBy2ndVirtBase, CppStructNonStandardBy2ndVirtBase2), " " );
1761- static_assert (! __is_layout_compatible (CStruct, CStructWithQualifiers), " " ); // FIXME: this is CWG1719
1770+ static_assert (__is_layout_compatible (CStruct, CStructWithQualifiers), " " );
17621771 static_assert (__is_layout_compatible (CStruct, CStructNoUniqueAddress) == bool (__has_cpp_attribute (no_unique_address)), " " ); // FIXME: this is CWG2759
17631772 static_assert (__is_layout_compatible (CStructNoUniqueAddress, CStructNoUniqueAddress2) == bool (__has_cpp_attribute (no_unique_address)), " " ); // FIXME: this is CWG2759
17641773 static_assert (__is_layout_compatible (CStruct, CStructAlignment), " " );
1774+ static_assert (__is_layout_compatible (CStruct, CStructAlignedMembers), " " ); // FIXME: alignment of members impact common initial sequence
17651775 static_assert (__is_layout_compatible (CStructWithBitfelds, CStructWithBitfelds), " " );
17661776 static_assert (__is_layout_compatible (CStructWithBitfelds, CStructWithBitfelds2), " " );
17671777 static_assert (!__is_layout_compatible (CStructWithBitfelds, CStructWithBitfelds3), " " );
0 commit comments