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