class-layout.cpp revision 4a47dbe2988978fb5f6316fe82a34174ffee61a5
1// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify 2 3#define SA(n, p) int a##n[(p) ? 1 : -1] 4 5struct A { 6 int a; 7 char b; 8}; 9 10SA(0, sizeof(A) == 8); 11 12struct B : A { 13 char c; 14}; 15 16SA(1, sizeof(B) == 12); 17 18struct C { 19// Make fields private so C won't be a POD type. 20private: 21 int a; 22 char b; 23}; 24 25SA(2, sizeof(C) == 8); 26 27struct D : C { 28 char c; 29}; 30 31SA(3, sizeof(D) == 8); 32 33struct __attribute__((packed)) E { 34 char b; 35 int a; 36}; 37 38SA(4, sizeof(E) == 5); 39 40struct __attribute__((packed)) F : E { 41 char d; 42}; 43 44SA(5, sizeof(F) == 6); 45 46struct G { G(); }; 47struct H : G { }; 48 49SA(6, sizeof(H) == 1); 50 51struct I { 52 char b; 53 int a; 54} __attribute__((packed)); 55 56SA(6_1, sizeof(I) == 5); 57 58// PR5580 59namespace PR5580 { 60 61class A { bool iv0 : 1; }; 62SA(7, sizeof(A) == 1); 63 64class B : A { bool iv0 : 1; }; 65SA(8, sizeof(B) == 2); 66 67struct C { bool iv0 : 1; }; 68SA(9, sizeof(C) == 1); 69 70struct D : C { bool iv0 : 1; }; 71SA(10, sizeof(D) == 2); 72 73} 74