ms-x86-basic-layout.cpp revision 651f13cea278ec967336033dd032faef0e9fc2ec
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 A4 {
9dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
10dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	A4() : a(0xf00000a4) {}
11dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
12dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
13dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B4 {
14dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
15dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B4() : a(0xf00000b4) {}
16dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
17dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
18dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct C4 {
19dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
20dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	C4() : a(0xf00000c4) {}
21dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {printf("C4");}
22dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
23dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
24dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct A16 {
25dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(16)) int a;
26dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	A16() : a(0xf0000a16) {}
27dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
28dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
29dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct C16 {
30dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(16)) int a;
31dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	C16() : a(0xf0000c16) {}
32dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {printf("C16");}
33dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
34dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
35dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF0 : A4, virtual B4 {
36dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
37dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestF0() : a(0xf00000F0) {}
38dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
39dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
40dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestF0
44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct A4 (base)
45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   (TestF0 vbtable pointer)
47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   int a
48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   struct B4 (virtual base)
49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     int a
50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=16, align=4
51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=12, nvalign=4]
52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestF0
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct A4 (base)
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   (TestF0 vbtable pointer)
59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   int a
60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct B4 (virtual base)
61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a
62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=32, align=8
63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]
64dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
65dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF1 : A4, virtual A16 {
66dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
67dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestF1() : a(0xf00000f1) {}
68dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
69dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
70dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestF1
73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct A4 (base)
74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   (TestF1 vbtable pointer)
76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   int a
77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct A16 (virtual base)
78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=32, align=16
80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=12, nvalign=16]
81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestF1
84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct A4 (base)
85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   (TestF1 vbtable pointer)
87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   int a
88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct A16 (virtual base)
89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     int a
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=48, align=16
91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=24, nvalign=16]
92dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
93dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF2 : A4, virtual C4 {
94dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
95dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestF2() : a(0xf00000f2) {}
96dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
97dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
98dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestF2
101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct A4 (base)
102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   (TestF2 vbtable pointer)
104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   int a
105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   struct C4 (virtual base)
106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     (C4 vftable pointer)
107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=20, align=4
109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=12, nvalign=4]
110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestF2
113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct A4 (base)
114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   (TestF2 vbtable pointer)
116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   int a
117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct C4 (virtual base)
118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     (C4 vftable pointer)
119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     int a
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=40, align=8
121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]
122dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
123dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF3 : A4, virtual C16 {
124dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
125dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestF3() : a(0xf00000f3) {}
126dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
127dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
128dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestF3
131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct A4 (base)
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   (TestF3 vbtable pointer)
134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   int a
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct C16 (virtual base)
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     (C16 vftable pointer)
137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     int a
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=48, align=16
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=12, nvalign=16]
140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestF3
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct A4 (base)
144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   (TestF3 vbtable pointer)
146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   int a
147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct C16 (virtual base)
148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     (C16 vftable pointer)
149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     int a
150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=64, align=16
151651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=24, nvalign=16]
152dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
153dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF4 : TestF3, A4 {
154dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
155dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestF4() : a(0xf00000f4) {}
156dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
157dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
158dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestF4
160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct TestF3 (base)
161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     struct A4 (base)
162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |       int a
163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     (TestF3 vbtable pointer)
164651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     int a
165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   struct A4 (base)
166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     int a
167651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   int a
168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct C16 (virtual base)
169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     (C16 vftable pointer)
170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     int a
171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=64, align=16
172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=32, nvalign=16]
173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestF4
175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct TestF3 (base)
176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     struct A4 (base)
177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |       int a
178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     (TestF3 vbtable pointer)
179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct A4 (base)
181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a
182651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   28 |   int a
183651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct C16 (virtual base)
184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     (C16 vftable pointer)
185651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     int a
186651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=64, align=16
187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=32, nvalign=16]
188dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
189dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF5 : TestF3, A4 {
190dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
191dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestF5() : a(0xf00000f5) {}
192dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("F5");}
193dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
194dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
195dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestF5
197651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (TestF5 vftable pointer)
198651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct TestF3 (base)
199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     struct A4 (base)
200651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |       int a
201651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |     (TestF3 vbtable pointer)
202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |     int a
203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   28 |   struct A4 (base)
204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   28 |     int a
205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct C16 (virtual base)
207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     (C16 vftable pointer)
208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     int a
209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
210651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=48, nvalign=16]
211651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
212651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestF5
213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (TestF5 vftable pointer)
214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct TestF3 (base)
215651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     struct A4 (base)
216651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |       int a
217651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     (TestF3 vbtable pointer)
218651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     int a
219651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   struct A4 (base)
220651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |     int a
221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   44 |   int a
222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct C16 (virtual base)
223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     (C16 vftable pointer)
224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=48, nvalign=16]
227dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
228dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF6 : TestF3, A4 {
229dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
230dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestF6() : a(0xf00000f6) {}
231dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {printf("F6");}
232dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
233dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
234dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestF6
236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct TestF3 (base)
237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     struct A4 (base)
238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |       int a
239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     (TestF3 vbtable pointer)
240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     int a
241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   struct A4 (base)
242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     int a
243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   int a
244651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   44 |   (vtordisp for vbase C16)
245651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct C16 (virtual base)
246651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     (C16 vftable pointer)
247651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     int a
248651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
249651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=32, nvalign=16]
250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestF6
252651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct TestF3 (base)
253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     struct A4 (base)
254651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |       int a
255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     (TestF3 vbtable pointer)
256651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
257651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct A4 (base)
258651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a
259651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   28 |   int a
260651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   44 |   (vtordisp for vbase C16)
261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct C16 (virtual base)
262651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     (C16 vftable pointer)
263651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
264651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
265651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=32, nvalign=16]
266dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
267dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF7 : A4, virtual C16 {
268dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
269dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestF7() : a(0xf00000f7) {}
270dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {printf("F7");}
271dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
272dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
273dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestF7
275651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct A4 (base)
276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
277651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   (TestF7 vbtable pointer)
278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   int a
279651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   28 |   (vtordisp for vbase C16)
280651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct C16 (virtual base)
281651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     (C16 vftable pointer)
282651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     int a
283651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=64, align=16
284651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=12, nvalign=16]
285651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestF7
287651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct A4 (base)
288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
289651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   (TestF7 vbtable pointer)
290651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   int a
291651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   44 |   (vtordisp for vbase C16)
292651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct C16 (virtual base)
293651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     (C16 vftable pointer)
294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
295651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=24, nvalign=16]
297dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
298dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF8 : TestF7, A4 {
299dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
300dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestF8() : a(0xf00000f8) {}
301dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {printf("F8");}
302dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
303dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
304dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
305651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestF8
306651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct TestF7 (base)
307651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     struct A4 (base)
308651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |       int a
309651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     (TestF7 vbtable pointer)
310651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     int a
311651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   struct A4 (base)
312651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     int a
313651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   int a
314651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   44 |   (vtordisp for vbase C16)
315651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct C16 (virtual base)
316651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     (C16 vftable pointer)
317651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     int a
318651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
319651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=32, nvalign=16]
320651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
321651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestF8
322651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct TestF7 (base)
323651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     struct A4 (base)
324651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |       int a
325651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     (TestF7 vbtable pointer)
326651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
327651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct A4 (base)
328651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a
329651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   28 |   int a
330651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   44 |   (vtordisp for vbase C16)
331651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct C16 (virtual base)
332651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     (C16 vftable pointer)
333651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
334651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
335651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=32, nvalign=16]
336dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
337dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF9 : A4, virtual C16 {
338dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
339dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestF9() : a(0xf00000f9) {}
340dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("F9");}
341dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
342dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
343dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
344651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestF9
345651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (TestF9 vftable pointer)
346651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   struct A4 (base)
347651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     int a
348651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   (TestF9 vbtable pointer)
349651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   int a
350651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct C16 (virtual base)
351651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     (C16 vftable pointer)
352651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     int a
353651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=48, align=16
354651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=16, nvalign=16]
355651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
356651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestF9
357651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (TestF9 vftable pointer)
358651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   struct A4 (base)
359651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     int a
360651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   (TestF9 vbtable pointer)
361651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   int a
362651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct C16 (virtual base)
363651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     (C16 vftable pointer)
364651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     int a
365651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=64, align=16
366651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=32, nvalign=16]
367dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
368dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestFA : TestF9, A4 {
369dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
370dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestFA() : a(0xf00000fa) {}
371dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("FA");}
372dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
373dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
374dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
375651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestFA
376651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct TestF9 (primary base)
377651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (TestF9 vftable pointer)
378651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     struct A4 (base)
379651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |       int a
380651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     (TestF9 vbtable pointer)
381651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     int a
382651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct A4 (base)
383651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
384651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |   int a
385651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct C16 (virtual base)
386651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     (C16 vftable pointer)
387651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     int a
388651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=64, align=16
389651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=32, nvalign=16]
390651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
391651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestFA
392651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct TestF9 (primary base)
393651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     (TestF9 vftable pointer)
394651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     struct A4 (base)
395651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |       int a
396651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     (TestF9 vbtable pointer)
397651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a
398651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct A4 (base)
399651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     int a
400651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   36 |   int a
401651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct C16 (virtual base)
402651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     (C16 vftable pointer)
403651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
404651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
405651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=48, nvalign=16]
406dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
407dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestFB : A16, virtual C16 {
408dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
409dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestFB() : a(0xf00000fb) {}
410dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("Fb");}
411dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
412dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
413dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
414651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestFB
415651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (TestFB vftable pointer)
416651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct A16 (base)
417651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
418651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   (TestFB vbtable pointer)
419651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   int a
420651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct C16 (virtual base)
421651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     (C16 vftable pointer)
422651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |     int a
423651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=96, align=16
424651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=16]
425651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
426651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestFB
427651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (TestFB vftable pointer)
428651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct A16 (base)
429651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
430651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   (TestFB vbtable pointer)
431651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   int a
432651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct C16 (virtual base)
433651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     (C16 vftable pointer)
434651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |     int a
435651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=96, align=16
436651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=16]
437dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
438dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestFC : TestFB, A4 {
439dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
440dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	TestFC() : a(0xf00000fc) {}
441dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("FC");}
442dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
443dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
444dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
445651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct TestFC
446651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct TestFB (primary base)
447651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (TestFB vftable pointer)
448651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     struct A16 (base)
449651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |       int a
450651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     (TestFB vbtable pointer)
451651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     int a
452651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct A4 (base)
453651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     int a
454651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   68 |   int a
455651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |   struct C16 (virtual base)
456651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |     (C16 vftable pointer)
457651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   96 |     int a
458651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=112, align=16
459651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=80, nvalign=16]
460651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
461651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct TestFC
462651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct TestFB (primary base)
463651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     (TestFB vftable pointer)
464651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     struct A16 (base)
465651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |       int a
466651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     (TestFB vbtable pointer)
467651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     int a
468651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct A4 (base)
469651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
470651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   68 |   int a
471651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |   struct C16 (virtual base)
472651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |     (C16 vftable pointer)
473651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   96 |     int a
474651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=112, align=16
475651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=80, nvalign=16]
476dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
477dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
478dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct A16f {
479dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(16)) int a;
480dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	A16f() : a(0xf0000a16) {}
481dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {printf("A16f");}
482dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
483dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
484dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct Y { char y; Y() : y(0xaa) {} };
485dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct X : virtual A16f {};
486dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
487dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B : A4, Y, X {
488dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
489dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B() : a(0xf000000b) {}
490dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
491dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
492dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F0 : A4, B {
493dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
494dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	F0() : a(0xf00000f0) {}
495dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("F0");}
496dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
497dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
498dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
499651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
500651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
501651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
502651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
503651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct F0
504651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (F0 vftable pointer)
505651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct A4 (base)
506651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
507651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct B (base)
508651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     struct A4 (base)
509651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |       int a
510651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   36 |     struct Y (base)
511651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   36 |       char y
512651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     struct X (base)
513651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |       (X vbtable pointer)
514651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   52 |     int a
515651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   int a
516651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |   struct A16f (virtual base)
517651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |     (A16f vftable pointer)
518651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   96 |     int a
519651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=112, align=16
520651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=80, nvalign=16]
521651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
522651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
523651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
524651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
525651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
526651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct F0
527651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (F0 vftable pointer)
528651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct A4 (base)
529651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
530651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct B (base)
531651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     struct A4 (base)
532651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |       int a
533651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   36 |     struct Y (base)
534651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   36 |       char y
535651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     struct X (base)
536651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |       (X vbtable pointer)
537651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   56 |     int a
538651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   int a
539651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |   struct A16f (virtual base)
540651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |     (A16f vftable pointer)
541651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   96 |     int a
542651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=112, align=16
543651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=80, nvalign=16]
544dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
545dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F1 : B, A4 {
546dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
547dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	F1() : a(0xf00000f1) {}
548dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("F1");}
549dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
550dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
551dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
552651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct F1
553651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (F1 vftable pointer)
554651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B (base)
555651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     struct A4 (base)
556651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |       int a
557651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |     struct Y (base)
558651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |       char y
559651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     struct X (base)
560651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |       (X vbtable pointer)
561651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   36 |     int a
562651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct A4 (base)
563651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     int a
564651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   52 |   int a
565651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct A16f (virtual base)
566651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     (A16f vftable pointer)
567651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |     int a
568651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=96, align=16
569651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=16]
570651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
571651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct F1
572651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (F1 vftable pointer)
573651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B (base)
574651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     struct A4 (base)
575651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |       int a
576651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |     struct Y (base)
577651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |       char y
578651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     struct X (base)
579651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |       (X vbtable pointer)
580651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |     int a
581651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct A4 (base)
582651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     int a
583651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   52 |   int a
584651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct A16f (virtual base)
585651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     (A16f vftable pointer)
586651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |     int a
587651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=96, align=16
588651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=16]
589dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
590dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F2 : A4, virtual A16f {
591dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
592dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	F2() : a(0xf00000f2) {}
593dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("F2");}
594dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
595dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
596dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
597651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct F2
598651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (F2 vftable pointer)
599651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   struct A4 (base)
600651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     int a
601651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   (F2 vbtable pointer)
602651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   int a
603651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct A16f (virtual base)
604651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     (A16f vftable pointer)
605651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     int a
606651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=48, align=16
607651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=16, nvalign=16]
608651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
609651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct F2
610651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (F2 vftable pointer)
611651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   struct A4 (base)
612651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     int a
613651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   (F2 vbtable pointer)
614651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   int a
615651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct A16f (virtual base)
616651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     (A16f vftable pointer)
617651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     int a
618651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=64, align=16
619651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=32, nvalign=16]
620dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
621dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F3 : A4, virtual A16f {
622dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(16)) int a;
623dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	F3() : a(0xf00000f3) {}
624dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("F3");}
625dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
626dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
627dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
628651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct F3
629651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (F3 vftable pointer)
630651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct A4 (base)
631651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
632651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |   (F3 vbtable pointer)
633651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   int a
634651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct A16f (virtual base)
635651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     (A16f vftable pointer)
636651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |     int a
637651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=96, align=16
638651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=16]
639651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
640651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct F3
641651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (F3 vftable pointer)
642651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct A4 (base)
643651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
644651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   (F3 vbtable pointer)
645651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   int a
646651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct A16f (virtual base)
647651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     (A16f vftable pointer)
648651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |     int a
649651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=96, align=16
650651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=16]
651dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
652dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F4 : A4, B {
653dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(16)) int a;
654dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	F4() : a(0xf00000f4) {}
655dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("F4");}
656dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
657dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
658dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
659651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct F4
660651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (F4 vftable pointer)
661651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct A4 (base)
662651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
663651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct B (base)
664651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     struct A4 (base)
665651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |       int a
666651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   36 |     struct Y (base)
667651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   36 |       char y
668651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     struct X (base)
669651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |       (X vbtable pointer)
670651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   52 |     int a
671651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   int a
672651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |   struct A16f (virtual base)
673651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |     (A16f vftable pointer)
674651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   96 |     int a
675651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=112, align=16
676651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=80, nvalign=16]
677651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
678651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct F4
679651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (F4 vftable pointer)
680651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct A4 (base)
681651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
682651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct B (base)
683651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     struct A4 (base)
684651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |       int a
685651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   36 |     struct Y (base)
686651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   36 |       char y
687651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     struct X (base)
688651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |       (X vbtable pointer)
689651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   56 |     int a
690651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   int a
691651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |   struct A16f (virtual base)
692651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |     (A16f vftable pointer)
693651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   96 |     int a
694651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=112, align=16
695651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=80, nvalign=16]
696dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
697dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F5 : A16f, virtual A4 {
698dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
699dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	F5() : a(0xf00000f5) {}
700dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("F5");}
701dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
702dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
703dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
704651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct F5
705651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct A16f (primary base)
706651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (A16f vftable pointer)
707651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
708651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   (F5 vbtable pointer)
709651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   int a
710651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct A4 (virtual base)
711651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     int a
712651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
713651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=16]
714651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
715651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct F5
716651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct A16f (primary base)
717651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     (A16f vftable pointer)
718651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
719651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   (F5 vbtable pointer)
720651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   int a
721651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct A4 (virtual base)
722651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
723651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
724651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=16]
725dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
726dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F6 : virtual A16f, A4, virtual B {
727dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
728dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	F6() : a(0xf00000f6) {}
729dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void g() {printf("F6");}
730dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
731dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
732dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
733651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct F6
734651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (F6 vftable pointer)
735651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   struct A4 (base)
736651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     int a
737651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   (F6 vbtable pointer)
738651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   int a
739651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct A16f (virtual base)
740651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     (A16f vftable pointer)
741651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     int a
742651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct B (virtual base)
743651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     struct A4 (base)
744651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |       int a
745651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   52 |     struct Y (base)
746651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   52 |       char y
747651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     struct X (base)
748651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |       (X vbtable pointer)
749651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   68 |     int a
750651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
751651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=16, nvalign=16]
752651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
753651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct F6
754651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (F6 vftable pointer)
755651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   struct A4 (base)
756651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     int a
757651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   (F6 vbtable pointer)
758651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   int a
759651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct A16f (virtual base)
760651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     (A16f vftable pointer)
761651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     int a
762651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B (virtual base)
763651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     struct A4 (base)
764651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |       int a
765651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   68 |     struct Y (base)
766651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   68 |       char y
767651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |     struct X (base)
768651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |       (X vbtable pointer)
769651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   88 |     int a
770651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=96, align=16
771651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=32, nvalign=16]
772651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
773651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct ArrayFieldOfRecords {
774651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A4 InlineElts[2];
775651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
776651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
777651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
778651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct ArrayFieldOfRecords
779651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct A4 [2] InlineElts
780651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=8, align=4
781651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
782651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
783651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct ArrayFieldOfRecords
784651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct A4 [2] InlineElts
785651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=8, align=4
786651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=4]
787651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
788651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct ArrayOfArrayFieldOfRecords {
789651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A4 InlineElts[2][2];
790651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
791651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
792651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
793651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct ArrayOfArrayFieldOfRecords
794651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct A4 [2][2] InlineElts
795651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=16, align=4
796651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=16, nvalign=4]
797651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
798651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct ArrayOfArrayFieldOfRecords
799651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct A4 [2][2] InlineElts
800651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=4
801651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=4]
802651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
803651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct RecordArrayTypedef {
804651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  typedef A4 ArrayTy[2];
805651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  ArrayTy InlineElts[2];
806651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
807651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
808651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
809651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct RecordArrayTypedef
810651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   ArrayTy [2] InlineElts
811651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=16, align=4
812651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=16, nvalign=4]
813651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
814651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct RecordArrayTypedef
815651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   ArrayTy [2] InlineElts
816651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=4
817651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=4]
818dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
819dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntint a[
820dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF0)+
821dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF1)+
822dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF2)+
823dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF3)+
824dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF4)+
825dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF5)+
826dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF6)+
827dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF7)+
828dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF8)+
829dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF9)+
830dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestFA)+
831dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestFB)+
832dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestFC)+
833dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F0)+
834dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F1)+
835dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F2)+
836dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F3)+
837dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F4)+
838dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F5)+
839651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(F6)+
840651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(ArrayFieldOfRecords)+
841651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(ArrayOfArrayFieldOfRecords)+
842651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(RecordArrayTypedef)+
843651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines0];
844