1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
2dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// 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 \
47967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// RUN:            | FileCheck %s -check-prefix CHECK-X64
5dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
6dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntextern "C" int printf(const char *fmt, ...);
7dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
8dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B0 {
9dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
10dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B0() : a(0xf00000B0) {}
11dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
12dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) B1 {
13dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
14dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B1() : a(0xf00000B1) {}
15dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
16dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B2 {
17dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(16)) int a;
18dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B2() : a(0xf00000B2) {}
19dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
20dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) B3 {
21dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	long long a1;
22dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
23dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B3() : a(0xf00000B3), a1(0xf00000B3f00000B3ll) {}
24dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
25dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct V {
26dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	char a;
27dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	V() : a(0X11) {}
28dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
29dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(32)) A16 {};
30dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct V1 : A16 { virtual void f() {} };
31dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct V2 {
32dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	long long a;
33dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a1;
34dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	V2() : a(0xf0000011f0000011ll), a1(0xf0000011) {}
35dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
36dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct V3 {
37dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
38dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	V3() : a(0xf0000022) {}
39dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
40dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) A16X {
41dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
42dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) B0X {
43dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a, a1;
44dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B0X() : a(0xf00000B0), a1(0xf00000B0) {}
45dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
46dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B1X {
47dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
48dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B1X() : a(0xf00000B1) {}
49dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
50dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B2X {
51dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
52dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B2X() : a(0xf00000B2) {}
53dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
54dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) B3X {
55dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
56dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B3X() : a(0xf00000B3) {}
57dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {}
58dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
59dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B4X : A16X {
60dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a, a1;
61dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B4X() : a(0xf00000B4), a1(0xf00000B4) {}
62dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
63dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B5X : virtual A16X {
64dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a, a1;
65dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B5X() : a(0xf00000B5), a1(0xf00000B5) {}
66dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
67dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B6X {
68dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
69dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B6X() : a(0xf00000B6) {}
70dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
71dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
72dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct A : B1, B0, B2, virtual V {
73dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
74dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	A() : a(0xf000000A) {}
75dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
76dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
77dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct A
83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B1 (base)
84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   struct B0 (base)
86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     int a
87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B2 (base)
88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   (A vbtable pointer)
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   int a
91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct V (virtual base)
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     char a
93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=16]
95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
997967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct A
101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B1 (base)
102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    4 |   struct B0 (base)
104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    4 |     int a
105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B2 (base)
106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   (A vbtable pointer)
108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   int a
109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct V (virtual base)
110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     char a
111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=16]
113dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
114dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B : B2, B0, B1, virtual V {
115dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
116dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B() : a(0xf000000B) {}
117dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
118dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
119dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct B
121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B2 (base)
122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B0 (base)
124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct B1 (base)
126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     int a
127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   36 |   (B vbtable pointer)
128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   52 |   int a
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct V (virtual base)
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     char a
131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=16]
1337967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct B
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B2 (base)
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (base)
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct B1 (base)
140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     int a
141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   (B vbtable pointer)
142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   52 |   int a
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct V (virtual base)
144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     char a
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=16]
147dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
148dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct C : B1, B0, virtual V {
149dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
150dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	long long a1;
151dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	C() : a(0xf000000C), a1(0xf000000Cf000000Cll) {}
152dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
153dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
154dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
155651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct C
156651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B1 (base)
157651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
158651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   struct B0 (base)
159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     int a
160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   (C vbtable pointer)
161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   int a
162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   long long a1
163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct V (virtual base)
164651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     char a
165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=64, align=16
166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=48, nvalign=16]
1677967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct C
169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B1 (base)
170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    4 |   struct B0 (base)
172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    4 |     int a
173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   (C vbtable pointer)
174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   int a
175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   long long a1
176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct V (virtual base)
177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     char a
178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=64, align=16
179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=48, nvalign=16]
180dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
181dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct D : B2, B0, virtual V {
182dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
183dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	D() : a(0xf000000D) {}
184dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
185dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
186dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct D
188651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B2 (base)
189651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
190651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B0 (base)
191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
192651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |   (D vbtable pointer)
193651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   36 |   int a
194651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct V (virtual base)
195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     char a
196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=64, align=16
197651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=48, nvalign=16]
1987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct D
200651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B2 (base)
201651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (base)
203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   (D vbtable pointer)
205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   36 |   int a
206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct V (virtual base)
207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     char a
208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=64, align=16
209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=48, nvalign=16]
210dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
211dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct E : B3, B0, virtual V {
212dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
213dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	E() : a(0xf000000E) {}
214dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
215dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
216dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
217651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
218651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct E
219651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B3 (base)
220651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     long long a1
221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     int a
222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B0 (base)
223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |   (E vbtable pointer)
225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   36 |   int a
226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct V (virtual base)
227651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     char a
228651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=64, align=16
229651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=48, nvalign=16]
230651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
2317967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
232651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct E
233651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B3 (base)
234651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     long long a1
235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     int a
236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (base)
237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   (E vbtable pointer)
239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   36 |   int a
240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct V (virtual base)
241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     char a
242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=64, align=16
243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=48, nvalign=16]
244dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
245dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F : B0, virtual V1 {
246dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(16)) int a;
247dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	F() : a(0xf000000F) {}
248dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {}
249dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
250dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
251dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
252651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
254651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct F
255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B0 (base)
256651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
257651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   (F vbtable pointer)
258651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
259651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   92 |   (vtordisp for vbase V1)
260651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   96 |   struct V1 (virtual base)
261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   96 |     (V1 vftable pointer)
262651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  128 |     struct A16 (base) (empty)
263651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=128, align=32
264651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=48, nvalign=32]
2657967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
266651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
267651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
268651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct F
269651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B0 (base)
270651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   (F vbtable pointer)
272651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
273651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   92 |   (vtordisp for vbase V1)
274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   96 |   struct V1 (virtual base)
275651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   96 |     (V1 vftable pointer)
276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  128 |     struct A16 (base) (empty)
277651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=128, align=32
278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=48, nvalign=32]
279dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
280dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct G : virtual V2, virtual V3 {
281dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
282dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	G() : a(0xf0000001) {}
283dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
284dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
285dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
287651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct G
289651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (G vbtable pointer)
290651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
291651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct V2 (virtual base)
292651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     long long a
293651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a1
294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   struct V3 (virtual base)
295651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |     int a
296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=28, align=8
297651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=8]
2987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
299651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
300651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
301651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct G
302651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (G vbtable pointer)
303651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
304651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct V2 (virtual base)
305651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     long long a
306651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a1
307651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct V3 (virtual base)
308651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     int a
309651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=40, align=8
310651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
311dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
312dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct H {
313dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(16)) int a;
314dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int b;
315dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	H() : a(0xf0000010), b(0xf0000010) {}
316dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
317dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
318dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
319651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct H
320651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   int a
321651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int b
322651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=16, align=16
323651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=16, nvalign=16]
3247967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
325651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct H
326651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   int a
327651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    4 |   int b
328651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=16
329651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=16]
330dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
331dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct I {
332dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B2 a;
333dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int b;
334dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	I() : b(0xf0000010) {}
335dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
336dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
337dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
338651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct I
339651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B2 a
340651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
341651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:        16 |   int b
342651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=32, align=16
343651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=32, nvalign=16]
3447967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
345651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct I
346651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B2 a
347651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
348651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:        16 |   int b
349651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=32, align=16
350651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=32, nvalign=16]
351dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
352dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AX : B0X, virtual B2X, virtual B6X, virtual B3X {
353dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
354dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	AX() : a(0xf000000A) {}
355dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {}
356dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {}
357dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
358dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
359dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
360651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
361651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
362651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
363651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
364651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct AX
365651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (AX vftable pointer)
366651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B0X (base)
367651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
368651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |     int a1
369651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   (AX vbtable pointer)
370651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   40 |   int a
371651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct B2X (virtual base)
372651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     int a
373651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   52 |   struct B6X (virtual base)
374651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   52 |     int a
375651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   76 |   (vtordisp for vbase B3X)
376651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |   struct B3X (virtual base)
377651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |     (B3X vftable pointer)
378651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   84 |     int a
379651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=96, align=16
380651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=48, nvalign=16]
381651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
382651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
3837967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
384651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
385651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
386651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct AX
387651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (AX vftable pointer)
388651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0X (base)
389651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
390651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |     int a1
391651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   (AX vbtable pointer)
392651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   int a
393651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct B2X (virtual base)
394651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     int a
395651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   52 |   struct B6X (virtual base)
396651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   52 |     int a
397651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   76 |   (vtordisp for vbase B3X)
398651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |   struct B3X (virtual base)
399651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |     (B3X vftable pointer)
400651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   88 |     int a
401651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=96, align=16
402651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=48, nvalign=16]
403dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
404dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct BX : B4X, virtual B2X, virtual B6X, virtual B3X {
405dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
406dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	BX() : a(0xf000000B) {}
407dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {}
408dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {}
409dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
410dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
411dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
412651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
413651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
414651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct BX
415651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (BX vftable pointer)
416651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B4X (base)
417651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     struct A16X (base) (empty)
418651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
419651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |     int a1
420651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   (BX vbtable pointer)
421651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   int a
422651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B2X (virtual base)
423651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     int a
424651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   68 |   struct B6X (virtual base)
425651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   68 |     int a
426651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   92 |   (vtordisp for vbase B3X)
427651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   96 |   struct B3X (virtual base)
428651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   96 |     (B3X vftable pointer)
429651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  100 |     int a
430651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=112, align=16
431651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=16]
4327967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
433651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
434651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
435651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct BX
436651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (BX vftable pointer)
437651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B4X (base)
438651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     struct A16X (base) (empty)
439651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
440651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |     int a1
441651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   (BX vbtable pointer)
442651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   int a
443651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B2X (virtual base)
444651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
445651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   68 |   struct B6X (virtual base)
446651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   68 |     int a
447651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   92 |   (vtordisp for vbase B3X)
448651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   96 |   struct B3X (virtual base)
449651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   96 |     (B3X vftable pointer)
450651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |     int a
451651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=112, align=16
452651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=16]
453dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
454dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct CX : B5X, virtual B2X, virtual B6X, virtual B3X {
455dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
456dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	CX() : a(0xf000000C) {}
457dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {}
458dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {}
459dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
460dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
461dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
462651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
463651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct CX
464651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (CX vftable pointer)
465651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B5X (base)
466651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     (B5X vbtable pointer)
467651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |     int a
468651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |     int a1
469651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   28 |   int a
470651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct A16X (virtual base) (empty)
471651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct B2X (virtual base)
472651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     int a
473651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   36 |   struct B6X (virtual base)
474651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   36 |     int a
475651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   60 |   (vtordisp for vbase B3X)
476651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B3X (virtual base)
477651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     (B3X vftable pointer)
478651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   68 |     int a
479651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
480651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=32, nvalign=16]
481651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
4827967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
483651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct CX
484651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (CX vftable pointer)
485651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B5X (base)
486651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     (B5X vbtable pointer)
487651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a
488651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   28 |     int a1
489651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
490651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct A16X (virtual base) (empty)
491651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct B2X (virtual base)
492651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     int a
493651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   52 |   struct B6X (virtual base)
494651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   52 |     int a
495651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   76 |   (vtordisp for vbase B3X)
496651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |   struct B3X (virtual base)
497651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |     (B3X vftable pointer)
498651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   88 |     int a
499651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=96, align=16
500651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=48, nvalign=16]
501dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
502dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) DX {
503dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
504dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	DX() : a(0xf000000D) {}
505dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {}
506dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
507dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
508dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
509651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct DX
510651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (DX vftable pointer)
511651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
512651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=16, align=16
513651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=16]
5147967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
515651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct DX
516651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (DX vftable pointer)
517651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
518651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=16
519651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=16]
520dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
521dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntint a[
522dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(A)+
523dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(B)+
524dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(C)+
525dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(D)+
526dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(E)+
527dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F)+
528dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(G)+
529dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(H)+
530dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(I)+
531dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AX)+
532dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(BX)+
533dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(CX)+
534dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(DX)];
535