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