1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN:            | FileCheck %s
3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN:            | FileCheck %s -check-prefix CHECK-X64
5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" int printf(const char *fmt, ...);
7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines__declspec(align(4096)) char buffer[4096];
8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct AT {};
10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct V : AT {
12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char c;
13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	V() {
14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("V   - this: %d\n", (int)((char*)this - buffer));
15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct AT0 {
19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	union { struct { int a; AT t; } y; int b; } x;
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char c;
21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	AT0() {
22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("AT0 - this: %d\n", (int)((char*)this - buffer));
23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct AT1 : V {
27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	int a;
28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	AT1() {
29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("AT1 - this: %d\n", (int)((char*)this - buffer));
30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct AT2 {
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	AT0 t;
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char AT2FieldName0;
36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	AT2() {
37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("AT2 - this: %d\n", (int)((char*)this - buffer));
38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("AT2 - Fiel: %d\n", (int)((char*)&AT2FieldName0 - buffer));
39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct AT3 : AT2, AT1 {
43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	AT3() {
44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("AT3 - this: %d\n", (int)((char*)this - buffer));
45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct AT3
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct AT2 (base)
58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     struct AT0 t
59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |       union AT0::(anonymous at {{.*}} x
60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |         struct AT0::(anonymous at {{.*}} y
61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |           int a
62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |           struct AT t (empty)
63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:         0 |         int b
64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:         8 |       char c
65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:        12 |     char AT2FieldName0
66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |   struct AT1 (base)
67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |     struct V (base)
68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |       struct AT (base) (empty)
69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |       char c
70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |     int a
71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=28, align=4
72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=28, nvalign=4]
73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct AT3
82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct AT2 (base)
83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     struct AT0 t
84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |       union AT0::(anonymous at {{.*}} x
85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |         struct AT0::(anonymous at {{.*}} y
86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |           int a
87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    4 |           struct AT t (empty)
88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:         0 |         int b
89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:         8 |       char c
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:        12 |     char AT2FieldName0
91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |   struct AT1 (base)
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |     struct V (base)
93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |       struct AT (base) (empty)
94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |       char c
95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a
96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=28, align=4
97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=28, nvalign=4]
98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct BT0 {
100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	BT0() {
101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("BT0 - this: %d\n", (int)((char*)this - buffer));
102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct BT2 : BT0 {
106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char BT2FieldName0;
107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	BT2() {
108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("BT2 - this: %d\n", (int)((char*)this - buffer));
109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("BT2 - Fiel: %d\n", (int)((char*)&BT2FieldName0 - buffer));
110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct BT3 : BT0, BT2 {
114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	BT3() {
115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("BT3 - this: %d\n", (int)((char*)this - buffer));
116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct BT3
123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct BT0 (base) (empty)
124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    1 |   struct BT2 (base)
125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    1 |     struct BT0 (base) (empty)
126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    1 |     char BT2FieldName0
127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=2, align=1
128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=2, nvalign=1]
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct BT3
133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct BT0 (base) (empty)
134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    1 |   struct BT2 (base)
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    1 |     struct BT0 (base) (empty)
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    1 |     char BT2FieldName0
137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=2, align=1
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=2, nvalign=1]
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct T0 : AT {
141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	T0() {
142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("T0 (this) : %d\n", (int)((char*)this - buffer));
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct T1 : T0 {
147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char a;
148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	T1() {
149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("T1 (this) : %d\n", (int)((char*)this - buffer));
150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("T1 (fiel) : %d\n", (int)((char*)&a - buffer));
151651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
152651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
153651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
154651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct T2 : AT {
155651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char a;
156651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	T2() {
157651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("T2 (this) : %d\n", (int)((char*)this - buffer));
158651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("T2 (fiel) : %d\n", (int)((char*)&a - buffer));
159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct __declspec(align(1)) T3 : virtual T1, virtual T2 {
163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	T3() {
164651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("T3 (this) : %d\n", (int)((char*)this - buffer));
165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
167651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct T3
173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (T3 vbtable pointer)
174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   struct T1 (virtual base)
175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     struct T0 (base) (empty)
176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |       struct AT (base) (empty)
177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     char a
178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   struct T2 (virtual base)
179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     struct AT (base) (empty)
180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     char a
181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=16, align=4
182651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=4, nvalign=4]
183651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
185651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
186651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct T3
188651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (T3 vbtable pointer)
189651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   struct T1 (virtual base)
190651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     struct T0 (base) (empty)
191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |       struct AT (base) (empty)
192651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     char a
193651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct T2 (virtual base)
194651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     struct AT (base) (empty)
195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     char a
196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
197651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=8]
198651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct B {};
200651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct C { int a; };
201651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct D : B, virtual C { B b; };
202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct E : D, B {};
203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct E
208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct D (base)
209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     struct B (base) (empty)
210651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (D vbtable pointer)
211651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     struct B b (empty)
212651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:         8 |   struct B (base) (empty)
213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct C (virtual base)
214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     int a
215651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=12, align=4
216651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
217651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
218651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
219651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
220651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   0 | struct E
222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   0 |   struct D (base)
223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   8 |     struct B (base) (empty)
224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   0 |     (D vbtable pointer)
225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   8 |     struct B b (empty)
226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:       16 |   struct B (base) (empty)
227651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  16 |   struct C (virtual base)
228651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  16 |     int a
229651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:     | [sizeof=24, align=8
230651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:     |  nvsize=16, nvalign=8]
231651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
232651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct F : virtual D, virtual B {};
233651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
234651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct F
235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (F vbtable pointer)
236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   struct C (virtual base)
237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     int a
238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct D (virtual base)
239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     struct B (base) (empty)
240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     (D vbtable pointer)
241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     struct B b (empty)
242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:        16 |   struct B (virtual base) (empty)
243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=16, align=4
244651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=4, nvalign=4]
245651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
246651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct F
247651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (F vbtable pointer)
248651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   struct C (virtual base)
249651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     int a
250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct D (virtual base)
251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     struct B (base) (empty)
252651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     (D vbtable pointer)
253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     struct B b (empty)
254651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:        32 |   struct B (virtual base) (empty)
255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=32, align=8
256651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=8]
257651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
258651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct JC0 {
259651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	JC0() { printf("JC0 : %d\n", (int)((char*)this - buffer)); }
260651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct JC1 : JC0 {
262651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	virtual void f() {}
263651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	JC1() { printf("JC1 : %d\n", (int)((char*)this - buffer)); }
264651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
265651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct JC2 : JC1 {
266651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	JC2() { printf("JC2 : %d\n", (int)((char*)this - buffer)); }
267651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
268651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct JC4 : JC1, JC2 {
269651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	JC4() { printf("JC4 : %d\n", (int)((char*)this - buffer)); }
270651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
272651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
273651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
275651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct JC4
277651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct JC1 (primary base)
278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (JC1 vftable pointer)
279651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     struct JC0 (base) (empty)
280651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct JC2 (base)
281651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     struct JC1 (primary base)
282651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |       (JC1 vftable pointer)
283651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |       struct JC0 (base) (empty)
284651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=12, align=4
285651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=12, nvalign=4]
286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
287651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
289651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
290651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct JC4
291651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct JC1 (primary base)
292651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     (JC1 vftable pointer)
293651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     struct JC0 (base) (empty)
294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct JC2 (base)
295651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     struct JC1 (primary base)
296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |       (JC1 vftable pointer)
297651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |       struct JC0 (base) (empty)
298651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
299651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]
300651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
3016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RA {};
3026bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RB { char c; };
3036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RV {};
3046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RW { char c; };
3056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RY { RY() { printf("%Id\n", (char*)this - buffer); } };
3066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX0 : RB, RA {};
3076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX1 : RA, RB {};
3086bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX2 : RA { char a; };
3096bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX3 : RA { RB a; };
3106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX4 { RA a; char b; };
3116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX5 { RA a; RB b; };
3126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX6 : virtual RV { RB a; };
3136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX7 : virtual RW { RA a; };
3146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX8 : RA, virtual RW {};
3156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
3166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ0 : RX0, RY {};
3176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
3186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
3196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
3206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
3216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
3226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RZ0
3236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   struct RX0 (base)
3246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     struct RB (base)
3256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |       char c
3266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    1 |     struct RA (base) (empty)
3276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    2 |   struct RY (base) (empty)
3286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=2, align=1
3296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=2, nvalign=1]
3306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
3316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
3326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
3336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
3346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
3356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RZ0
3366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   struct RX0 (base)
3376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     struct RB (base)
3386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |       char c
3396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    1 |     struct RA (base) (empty)
3406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    2 |   struct RY (base) (empty)
3416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=2, align=1
3426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=2, nvalign=1]
3436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
3446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ1 : RX1, RY {};
3456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
3466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
3476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RZ1
3486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   struct RX1 (base)
3496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     struct RA (base) (empty)
3506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     struct RB (base)
3516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |       char c
3526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    1 |   struct RY (base) (empty)
3536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=1, align=1
3546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=1, nvalign=1]
3556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
3566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
3576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RZ1
3586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   struct RX1 (base)
3596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     struct RA (base) (empty)
3606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     struct RB (base)
3616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |       char c
3626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    1 |   struct RY (base) (empty)
3636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=1, align=1
3646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=1, nvalign=1]
3656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
3666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ2 : RX2, RY {};
3676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
3686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
3696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RZ2
3706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   struct RX2 (base)
3716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     struct RA (base) (empty)
3726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     char a
3736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    2 |   struct RY (base) (empty)
3746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=2, align=1
3756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=2, nvalign=1]
3766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
3776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
3786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RZ2
3796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   struct RX2 (base)
3806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     struct RA (base) (empty)
3816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     char a
3826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    2 |   struct RY (base) (empty)
3836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=2, align=1
3846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=2, nvalign=1]
3856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
3866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ3 : RX3, RY {};
3876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
3886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
3896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RZ3
3906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   struct RX3 (base)
3916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     struct RA (base) (empty)
3926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     struct RB a
3936bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |       char c
3946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |     [sizeof=1, align=1
3956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |      nvsize=1, nvalign=1]
3966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    1 |   struct RY (base) (empty)
3976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=1, align=1
3986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=1, nvalign=1]
3996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RZ3
4026bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   struct RX3 (base)
4036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     struct RA (base) (empty)
4046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     struct RB a
4056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |       char c
4066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |     [sizeof=1, align=1
4076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |      nvsize=1, nvalign=1]
4086bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    1 |   struct RY (base) (empty)
4096bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=1, align=1
4106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=1, nvalign=1]
4116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
4126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ4 : RX4, RY {};
4136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RZ4
4166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   struct RX4 (base)
4176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     struct RA a (empty)
4186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |     [sizeof=1, align=1
4196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |      nvsize=0, nvalign=1]
4206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    1 |     char b
4216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    3 |   struct RY (base) (empty)
4226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=3, align=1
4236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=3, nvalign=1]
4246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RZ4
4276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   struct RX4 (base)
4286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     struct RA a (empty)
4296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |     [sizeof=1, align=1
4306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |      nvsize=0, nvalign=1]
4316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    1 |     char b
4326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    3 |   struct RY (base) (empty)
4336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=3, align=1
4346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=3, nvalign=1]
4356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
4366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ5 : RX5, RY {};
4376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RZ5
4406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   struct RX5 (base)
4416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     struct RA a (empty)
4426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |     [sizeof=1, align=1
4436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |      nvsize=0, nvalign=1]
4446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    1 |     struct RB b
4456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    1 |       char c
4466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |     [sizeof=1, align=1
4476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |      nvsize=1, nvalign=1]
4486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    2 |   struct RY (base) (empty)
4496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=2, align=1
4506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=2, nvalign=1]
4516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RZ5
4546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   struct RX5 (base)
4556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     struct RA a (empty)
4566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |     [sizeof=1, align=1
4576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |      nvsize=0, nvalign=1]
4586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    1 |     struct RB b
4596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    1 |       char c
4606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |     [sizeof=1, align=1
4616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |      nvsize=1, nvalign=1]
4626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    2 |   struct RY (base) (empty)
4636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=2, align=1
4646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=2, nvalign=1]
4656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
4666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ6 : RX6, RY {};
4676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RZ6
4716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   struct RX6 (base)
4726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     (RX6 vbtable pointer)
4736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    4 |     struct RB a
4746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    4 |       char c
4756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |     [sizeof=1, align=1
4766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |      nvsize=1, nvalign=1]
4776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    9 |   struct RY (base) (empty)
4786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:   12 |   struct RV (virtual base) (empty)
4796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=12, align=4
4806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=12, nvalign=4]
4816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RZ6
4856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   struct RX6 (base)
4866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     (RX6 vbtable pointer)
4876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    8 |     struct RB a
4886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    8 |       char c
4896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |     [sizeof=1, align=1
4906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |      nvsize=1, nvalign=1]
4916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   17 |   struct RY (base) (empty)
4926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   24 |   struct RV (virtual base) (empty)
4936bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
4946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]
4956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
4966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ7 : RX7, RY {};
4976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
5006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RZ7
5016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   struct RX7 (base)
5026bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     (RX7 vbtable pointer)
5036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    4 |     struct RA a (empty)
5046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |     [sizeof=1, align=1
5056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |      nvsize=0, nvalign=1]
5066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    8 |   struct RY (base) (empty)
5076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    8 |   struct RW (virtual base)
5086bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    8 |     char c
5096bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=9, align=4
5106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
5116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RZ7
5156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   struct RX7 (base)
5166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     (RX7 vbtable pointer)
5176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    8 |     struct RA a (empty)
5186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |     [sizeof=1, align=1
5196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |      nvsize=0, nvalign=1]
5206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   16 |   struct RY (base) (empty)
5216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   16 |   struct RW (virtual base)
5226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   16 |     char c
5236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
5246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
5256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
5266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ8 : RX8, RY {};
5276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
5286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
5296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RZ8
5306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   struct RX8 (base)
5316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    4 |     struct RA (base) (empty)
5326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |     (RX8 vbtable pointer)
5336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    4 |   struct RY (base) (empty)
5346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    4 |   struct RW (virtual base)
5356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    4 |     char c
5366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=5, align=4
5376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=4, nvalign=4]
5386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RZ8
5416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   struct RX8 (base)
5426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    8 |     struct RA (base) (empty)
5436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |     (RX8 vbtable pointer)
5446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    8 |   struct RY (base) (empty)
5456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    8 |   struct RW (virtual base)
5466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    8 |     char c
5476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=8
5486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=8]
5496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
5506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct JA {};
5516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct JB {};
5526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct JC : JA { virtual void f() {} };
5536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct JD : virtual JB, virtual JC { virtual void f() {} JD() {} };
5546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
5556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
5566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
5576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
5586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
5596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct JD
5606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   (JD vbtable pointer)
5616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    4 |   struct JB (virtual base) (empty)
5626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    4 |   (vtordisp for vbase JC)
5636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    8 |   struct JC (virtual base)
5646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    8 |     (JC vftable pointer)
5656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:   12 |     struct JA (base) (empty)
5666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=12, align=4
5676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=4, nvalign=4]
5686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct JD
5736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   (JD vbtable pointer)
5746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    8 |   struct JB (virtual base) (empty)
5756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   12 |   (vtordisp for vbase JC)
5766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   16 |   struct JC (virtual base)
5776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   16 |     (JC vftable pointer)
5786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:   24 |     struct JA (base) (empty)
5796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
5806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=8]
5816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
582651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint a[
583651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(AT3) +
584651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(BT3) +
585651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(T3) +
586651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(E) +
587651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(F) +
588651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(JC4) +
5896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ0) +
5906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ1) +
5916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ2) +
5926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ3) +
5936bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ4) +
5946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ5) +
5956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ6) +
5966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ7) +
5976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ8) +
5986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(JD) +
599651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines0];
600