1 // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 2 // expected-no-diagnostics 3 4 // Test that the alignment of a empty direct base class is correctly 5 // inherited by the derived class, and correctly not inherited on PS4/PS5. 6 7 struct A { 8 } __attribute__ ((aligned(16))); 9 10 static_assert(__alignof(A) == 16, "A should be aligned to 16 bytes"); 11 12 struct B1 : public A { 13 }; 14 15 #if defined(__SCE__) 16 static_assert(__alignof(B1) == 1, "B1 should be aligned to 1 byte"); 17 #else 18 static_assert(__alignof(B1) == 16, "B1 should be aligned to 16 bytes"); 19 #endif 20 21 struct B2 : public A { 22 } __attribute__ ((aligned(2))); 23 24 #if defined(__SCE__) 25 static_assert(__alignof(B2) == 2, "B2 should be aligned to 2 bytes"); 26 #else 27 static_assert(__alignof(B2) == 16, "B2 should be aligned to 16 bytes"); 28 #endif 29 30 struct B3 : public A { 31 } __attribute__ ((aligned(4))); 32 33 #if defined(__SCE__) 34 static_assert(__alignof(B3) == 4, "B3 should be aligned to 4 bytes"); 35 #else 36 static_assert(__alignof(B3) == 16, "B3 should be aligned to 16 bytes"); 37 #endif 38 39 struct B4 : public A { 40 } __attribute__ ((aligned(8))); 41 42 #if defined(__SCE__) 43 static_assert(__alignof(B4) == 8, "B4 should be aligned to 8 bytes"); 44 #else 45 static_assert(__alignof(B4) == 16, "B4 should be aligned to 16 bytes"); 46 #endif 47 48 struct B5 : public A { 49 } __attribute__ ((aligned(16))); 50 51 static_assert(__alignof(B5) == 16, "B5 should be aligned to 16 bytes"); 52 53 struct B6 : public A { 54 } __attribute__ ((aligned(32))); 55 56 static_assert(__alignof(B6) == 32, "B6 should be aligned to 32 bytes"); 57 58