blob: aac7aed0601923288f74edd77803315969d468f8 [file] [log] [blame]
Stephen Hines651f13c2014-04-23 16:59:28 -07001// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
Warren Huntdc581802013-10-14 19:08:58 +00002// RUN: | FileCheck %s
Stephen Hines651f13c2014-04-23 16:59:28 -07003// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
Warren Hunt7967c952013-10-23 23:53:07 +00004// RUN: | FileCheck %s -check-prefix CHECK-X64
Warren Huntdc581802013-10-14 19:08:58 +00005
6extern "C" int printf(const char *fmt, ...);
7
8struct A4 {
9 int a;
10 A4() : a(0xf00000a4) {}
11};
12
13struct B4 {
14 int a;
15 B4() : a(0xf00000b4) {}
16};
17
18struct C4 {
19 int a;
20 C4() : a(0xf00000c4) {}
21 virtual void f() {printf("C4");}
22};
23
24struct A16 {
25 __declspec(align(16)) int a;
26 A16() : a(0xf0000a16) {}
27};
28
29struct C16 {
30 __declspec(align(16)) int a;
31 C16() : a(0xf0000c16) {}
32 virtual void f() {printf("C16");}
33};
34
35struct TestF0 : A4, virtual B4 {
36 int a;
37 TestF0() : a(0xf00000F0) {}
38};
39
40// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -070041// CHECK: *** Dumping AST Record Layout
42// CHECK: *** Dumping AST Record Layout
43// CHECK-NEXT: 0 | struct TestF0
44// CHECK-NEXT: 0 | struct A4 (base)
45// CHECK-NEXT: 0 | int a
46// CHECK-NEXT: 4 | (TestF0 vbtable pointer)
47// CHECK-NEXT: 8 | int a
48// CHECK-NEXT: 12 | struct B4 (virtual base)
49// CHECK-NEXT: 12 | int a
50// CHECK-NEXT: | [sizeof=16, align=4
51// CHECK-NEXT: | nvsize=12, nvalign=4]
Warren Hunt7967c952013-10-23 23:53:07 +000052// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -070053// CHECK-X64: *** Dumping AST Record Layout
54// CHECK-X64: *** Dumping AST Record Layout
55// CHECK-X64-NEXT: 0 | struct TestF0
56// CHECK-X64-NEXT: 0 | struct A4 (base)
57// CHECK-X64-NEXT: 0 | int a
58// CHECK-X64-NEXT: 8 | (TestF0 vbtable pointer)
59// CHECK-X64-NEXT: 16 | int a
60// CHECK-X64-NEXT: 24 | struct B4 (virtual base)
61// CHECK-X64-NEXT: 24 | int a
62// CHECK-X64-NEXT: | [sizeof=32, align=8
63// CHECK-X64-NEXT: | nvsize=24, nvalign=8]
Warren Huntdc581802013-10-14 19:08:58 +000064
65struct TestF1 : A4, virtual A16 {
66 int a;
67 TestF1() : a(0xf00000f1) {}
68};
69
70// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -070071// CHECK: *** Dumping AST Record Layout
72// CHECK-NEXT: 0 | struct TestF1
73// CHECK-NEXT: 0 | struct A4 (base)
74// CHECK-NEXT: 0 | int a
75// CHECK-NEXT: 4 | (TestF1 vbtable pointer)
76// CHECK-NEXT: 8 | int a
77// CHECK-NEXT: 16 | struct A16 (virtual base)
78// CHECK-NEXT: 16 | int a
79// CHECK-NEXT: | [sizeof=32, align=16
80// CHECK-NEXT: | nvsize=12, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +000081// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -070082// CHECK-X64: *** Dumping AST Record Layout
83// CHECK-X64-NEXT: 0 | struct TestF1
84// CHECK-X64-NEXT: 0 | struct A4 (base)
85// CHECK-X64-NEXT: 0 | int a
86// CHECK-X64-NEXT: 8 | (TestF1 vbtable pointer)
87// CHECK-X64-NEXT: 16 | int a
88// CHECK-X64-NEXT: 32 | struct A16 (virtual base)
89// CHECK-X64-NEXT: 32 | int a
90// CHECK-X64-NEXT: | [sizeof=48, align=16
91// CHECK-X64-NEXT: | nvsize=24, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +000092
93struct TestF2 : A4, virtual C4 {
94 int a;
95 TestF2() : a(0xf00000f2) {}
96};
97
98// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -070099// CHECK: *** Dumping AST Record Layout
100// CHECK-NEXT: 0 | struct TestF2
101// CHECK-NEXT: 0 | struct A4 (base)
102// CHECK-NEXT: 0 | int a
103// CHECK-NEXT: 4 | (TestF2 vbtable pointer)
104// CHECK-NEXT: 8 | int a
105// CHECK-NEXT: 12 | struct C4 (virtual base)
106// CHECK-NEXT: 12 | (C4 vftable pointer)
107// CHECK-NEXT: 16 | int a
108// CHECK-NEXT: | [sizeof=20, align=4
109// CHECK-NEXT: | nvsize=12, nvalign=4]
Warren Hunt7967c952013-10-23 23:53:07 +0000110// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700111// CHECK-X64: *** Dumping AST Record Layout
112// CHECK-X64-NEXT: 0 | struct TestF2
113// CHECK-X64-NEXT: 0 | struct A4 (base)
114// CHECK-X64-NEXT: 0 | int a
115// CHECK-X64-NEXT: 8 | (TestF2 vbtable pointer)
116// CHECK-X64-NEXT: 16 | int a
117// CHECK-X64-NEXT: 24 | struct C4 (virtual base)
118// CHECK-X64-NEXT: 24 | (C4 vftable pointer)
119// CHECK-X64-NEXT: 32 | int a
120// CHECK-X64-NEXT: | [sizeof=40, align=8
121// CHECK-X64-NEXT: | nvsize=24, nvalign=8]
Warren Huntdc581802013-10-14 19:08:58 +0000122
123struct TestF3 : A4, virtual C16 {
124 int a;
125 TestF3() : a(0xf00000f3) {}
126};
127
128// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700129// CHECK: *** Dumping AST Record Layout
130// CHECK-NEXT: 0 | struct TestF3
131// CHECK-NEXT: 0 | struct A4 (base)
132// CHECK-NEXT: 0 | int a
133// CHECK-NEXT: 4 | (TestF3 vbtable pointer)
134// CHECK-NEXT: 8 | int a
135// CHECK-NEXT: 16 | struct C16 (virtual base)
136// CHECK-NEXT: 16 | (C16 vftable pointer)
137// CHECK-NEXT: 32 | int a
138// CHECK-NEXT: | [sizeof=48, align=16
139// CHECK-NEXT: | nvsize=12, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000140// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700141// CHECK-X64: *** Dumping AST Record Layout
142// CHECK-X64-NEXT: 0 | struct TestF3
143// CHECK-X64-NEXT: 0 | struct A4 (base)
144// CHECK-X64-NEXT: 0 | int a
145// CHECK-X64-NEXT: 8 | (TestF3 vbtable pointer)
146// CHECK-X64-NEXT: 16 | int a
147// CHECK-X64-NEXT: 32 | struct C16 (virtual base)
148// CHECK-X64-NEXT: 32 | (C16 vftable pointer)
149// CHECK-X64-NEXT: 48 | int a
150// CHECK-X64-NEXT: | [sizeof=64, align=16
151// CHECK-X64-NEXT: | nvsize=24, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000152
153struct TestF4 : TestF3, A4 {
154 int a;
155 TestF4() : a(0xf00000f4) {}
156};
157
158// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700159// CHECK-NEXT: 0 | struct TestF4
160// CHECK-NEXT: 0 | struct TestF3 (base)
161// CHECK-NEXT: 0 | struct A4 (base)
162// CHECK-NEXT: 0 | int a
163// CHECK-NEXT: 4 | (TestF3 vbtable pointer)
164// CHECK-NEXT: 8 | int a
165// CHECK-NEXT: 12 | struct A4 (base)
166// CHECK-NEXT: 12 | int a
167// CHECK-NEXT: 16 | int a
168// CHECK-NEXT: 32 | struct C16 (virtual base)
169// CHECK-NEXT: 32 | (C16 vftable pointer)
170// CHECK-NEXT: 48 | int a
171// CHECK-NEXT: | [sizeof=64, align=16
172// CHECK-NEXT: | nvsize=32, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000173// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700174// CHECK-X64-NEXT: 0 | struct TestF4
175// CHECK-X64-NEXT: 0 | struct TestF3 (base)
176// CHECK-X64-NEXT: 0 | struct A4 (base)
177// CHECK-X64-NEXT: 0 | int a
178// CHECK-X64-NEXT: 8 | (TestF3 vbtable pointer)
179// CHECK-X64-NEXT: 16 | int a
180// CHECK-X64-NEXT: 24 | struct A4 (base)
181// CHECK-X64-NEXT: 24 | int a
182// CHECK-X64-NEXT: 28 | int a
183// CHECK-X64-NEXT: 32 | struct C16 (virtual base)
184// CHECK-X64-NEXT: 32 | (C16 vftable pointer)
185// CHECK-X64-NEXT: 48 | int a
186// CHECK-X64-NEXT: | [sizeof=64, align=16
187// CHECK-X64-NEXT: | nvsize=32, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000188
189struct TestF5 : TestF3, A4 {
190 int a;
191 TestF5() : a(0xf00000f5) {}
192 virtual void g() {printf("F5");}
193};
194
195// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700196// CHECK-NEXT: 0 | struct TestF5
197// CHECK-NEXT: 0 | (TestF5 vftable pointer)
198// CHECK-NEXT: 16 | struct TestF3 (base)
199// CHECK-NEXT: 16 | struct A4 (base)
200// CHECK-NEXT: 16 | int a
201// CHECK-NEXT: 20 | (TestF3 vbtable pointer)
202// CHECK-NEXT: 24 | int a
203// CHECK-NEXT: 28 | struct A4 (base)
204// CHECK-NEXT: 28 | int a
205// CHECK-NEXT: 32 | int a
206// CHECK-NEXT: 48 | struct C16 (virtual base)
207// CHECK-NEXT: 48 | (C16 vftable pointer)
208// CHECK-NEXT: 64 | int a
209// CHECK-NEXT: | [sizeof=80, align=16
210// CHECK-NEXT: | nvsize=48, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000211// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700212// CHECK-X64-NEXT: 0 | struct TestF5
213// CHECK-X64-NEXT: 0 | (TestF5 vftable pointer)
214// CHECK-X64-NEXT: 16 | struct TestF3 (base)
215// CHECK-X64-NEXT: 16 | struct A4 (base)
216// CHECK-X64-NEXT: 16 | int a
217// CHECK-X64-NEXT: 24 | (TestF3 vbtable pointer)
218// CHECK-X64-NEXT: 32 | int a
219// CHECK-X64-NEXT: 40 | struct A4 (base)
220// CHECK-X64-NEXT: 40 | int a
221// CHECK-X64-NEXT: 44 | int a
222// CHECK-X64-NEXT: 48 | struct C16 (virtual base)
223// CHECK-X64-NEXT: 48 | (C16 vftable pointer)
224// CHECK-X64-NEXT: 64 | int a
225// CHECK-X64-NEXT: | [sizeof=80, align=16
226// CHECK-X64-NEXT: | nvsize=48, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000227
228struct TestF6 : TestF3, A4 {
229 int a;
230 TestF6() : a(0xf00000f6) {}
231 virtual void f() {printf("F6");}
232};
233
234// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700235// CHECK-NEXT: 0 | struct TestF6
236// CHECK-NEXT: 0 | struct TestF3 (base)
237// CHECK-NEXT: 0 | struct A4 (base)
238// CHECK-NEXT: 0 | int a
239// CHECK-NEXT: 4 | (TestF3 vbtable pointer)
240// CHECK-NEXT: 8 | int a
241// CHECK-NEXT: 12 | struct A4 (base)
242// CHECK-NEXT: 12 | int a
243// CHECK-NEXT: 16 | int a
244// CHECK-NEXT: 44 | (vtordisp for vbase C16)
245// CHECK-NEXT: 48 | struct C16 (virtual base)
246// CHECK-NEXT: 48 | (C16 vftable pointer)
247// CHECK-NEXT: 64 | int a
248// CHECK-NEXT: | [sizeof=80, align=16
249// CHECK-NEXT: | nvsize=32, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000250// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700251// CHECK-X64-NEXT: 0 | struct TestF6
252// CHECK-X64-NEXT: 0 | struct TestF3 (base)
253// CHECK-X64-NEXT: 0 | struct A4 (base)
254// CHECK-X64-NEXT: 0 | int a
255// CHECK-X64-NEXT: 8 | (TestF3 vbtable pointer)
256// CHECK-X64-NEXT: 16 | int a
257// CHECK-X64-NEXT: 24 | struct A4 (base)
258// CHECK-X64-NEXT: 24 | int a
259// CHECK-X64-NEXT: 28 | int a
260// CHECK-X64-NEXT: 44 | (vtordisp for vbase C16)
261// CHECK-X64-NEXT: 48 | struct C16 (virtual base)
262// CHECK-X64-NEXT: 48 | (C16 vftable pointer)
263// CHECK-X64-NEXT: 64 | int a
264// CHECK-X64-NEXT: | [sizeof=80, align=16
265// CHECK-X64-NEXT: | nvsize=32, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000266
267struct TestF7 : A4, virtual C16 {
268 int a;
269 TestF7() : a(0xf00000f7) {}
270 virtual void f() {printf("F7");}
271};
272
273// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700274// CHECK-NEXT: 0 | struct TestF7
275// CHECK-NEXT: 0 | struct A4 (base)
276// CHECK-NEXT: 0 | int a
277// CHECK-NEXT: 4 | (TestF7 vbtable pointer)
278// CHECK-NEXT: 8 | int a
279// CHECK-NEXT: 28 | (vtordisp for vbase C16)
280// CHECK-NEXT: 32 | struct C16 (virtual base)
281// CHECK-NEXT: 32 | (C16 vftable pointer)
282// CHECK-NEXT: 48 | int a
283// CHECK-NEXT: | [sizeof=64, align=16
284// CHECK-NEXT: | nvsize=12, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000285// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700286// CHECK-X64-NEXT: 0 | struct TestF7
287// CHECK-X64-NEXT: 0 | struct A4 (base)
288// CHECK-X64-NEXT: 0 | int a
289// CHECK-X64-NEXT: 8 | (TestF7 vbtable pointer)
290// CHECK-X64-NEXT: 16 | int a
291// CHECK-X64-NEXT: 44 | (vtordisp for vbase C16)
292// CHECK-X64-NEXT: 48 | struct C16 (virtual base)
293// CHECK-X64-NEXT: 48 | (C16 vftable pointer)
294// CHECK-X64-NEXT: 64 | int a
295// CHECK-X64-NEXT: | [sizeof=80, align=16
296// CHECK-X64-NEXT: | nvsize=24, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000297
298struct TestF8 : TestF7, A4 {
299 int a;
300 TestF8() : a(0xf00000f8) {}
301 virtual void f() {printf("F8");}
302};
303
304// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700305// CHECK-NEXT: 0 | struct TestF8
306// CHECK-NEXT: 0 | struct TestF7 (base)
307// CHECK-NEXT: 0 | struct A4 (base)
308// CHECK-NEXT: 0 | int a
309// CHECK-NEXT: 4 | (TestF7 vbtable pointer)
310// CHECK-NEXT: 8 | int a
311// CHECK-NEXT: 12 | struct A4 (base)
312// CHECK-NEXT: 12 | int a
313// CHECK-NEXT: 16 | int a
314// CHECK-NEXT: 44 | (vtordisp for vbase C16)
315// CHECK-NEXT: 48 | struct C16 (virtual base)
316// CHECK-NEXT: 48 | (C16 vftable pointer)
317// CHECK-NEXT: 64 | int a
318// CHECK-NEXT: | [sizeof=80, align=16
319// CHECK-NEXT: | nvsize=32, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000320// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700321// CHECK-X64-NEXT: 0 | struct TestF8
322// CHECK-X64-NEXT: 0 | struct TestF7 (base)
323// CHECK-X64-NEXT: 0 | struct A4 (base)
324// CHECK-X64-NEXT: 0 | int a
325// CHECK-X64-NEXT: 8 | (TestF7 vbtable pointer)
326// CHECK-X64-NEXT: 16 | int a
327// CHECK-X64-NEXT: 24 | struct A4 (base)
328// CHECK-X64-NEXT: 24 | int a
329// CHECK-X64-NEXT: 28 | int a
330// CHECK-X64-NEXT: 44 | (vtordisp for vbase C16)
331// CHECK-X64-NEXT: 48 | struct C16 (virtual base)
332// CHECK-X64-NEXT: 48 | (C16 vftable pointer)
333// CHECK-X64-NEXT: 64 | int a
334// CHECK-X64-NEXT: | [sizeof=80, align=16
335// CHECK-X64-NEXT: | nvsize=32, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000336
337struct TestF9 : A4, virtual C16 {
338 int a;
339 TestF9() : a(0xf00000f9) {}
340 virtual void g() {printf("F9");}
341};
342
343// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700344// CHECK-NEXT: 0 | struct TestF9
345// CHECK-NEXT: 0 | (TestF9 vftable pointer)
346// CHECK-NEXT: 4 | struct A4 (base)
347// CHECK-NEXT: 4 | int a
348// CHECK-NEXT: 8 | (TestF9 vbtable pointer)
349// CHECK-NEXT: 12 | int a
350// CHECK-NEXT: 16 | struct C16 (virtual base)
351// CHECK-NEXT: 16 | (C16 vftable pointer)
352// CHECK-NEXT: 32 | int a
353// CHECK-NEXT: | [sizeof=48, align=16
354// CHECK-NEXT: | nvsize=16, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000355// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700356// CHECK-X64-NEXT: 0 | struct TestF9
357// CHECK-X64-NEXT: 0 | (TestF9 vftable pointer)
358// CHECK-X64-NEXT: 8 | struct A4 (base)
359// CHECK-X64-NEXT: 8 | int a
360// CHECK-X64-NEXT: 16 | (TestF9 vbtable pointer)
361// CHECK-X64-NEXT: 24 | int a
362// CHECK-X64-NEXT: 32 | struct C16 (virtual base)
363// CHECK-X64-NEXT: 32 | (C16 vftable pointer)
364// CHECK-X64-NEXT: 48 | int a
365// CHECK-X64-NEXT: | [sizeof=64, align=16
366// CHECK-X64-NEXT: | nvsize=32, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000367
368struct TestFA : TestF9, A4 {
369 int a;
370 TestFA() : a(0xf00000fa) {}
371 virtual void g() {printf("FA");}
372};
373
374// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700375// CHECK-NEXT: 0 | struct TestFA
376// CHECK-NEXT: 0 | struct TestF9 (primary base)
377// CHECK-NEXT: 0 | (TestF9 vftable pointer)
378// CHECK-NEXT: 4 | struct A4 (base)
379// CHECK-NEXT: 4 | int a
380// CHECK-NEXT: 8 | (TestF9 vbtable pointer)
381// CHECK-NEXT: 12 | int a
382// CHECK-NEXT: 16 | struct A4 (base)
383// CHECK-NEXT: 16 | int a
384// CHECK-NEXT: 20 | int a
385// CHECK-NEXT: 32 | struct C16 (virtual base)
386// CHECK-NEXT: 32 | (C16 vftable pointer)
387// CHECK-NEXT: 48 | int a
388// CHECK-NEXT: | [sizeof=64, align=16
389// CHECK-NEXT: | nvsize=32, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000390// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700391// CHECK-X64-NEXT: 0 | struct TestFA
392// CHECK-X64-NEXT: 0 | struct TestF9 (primary base)
393// CHECK-X64-NEXT: 0 | (TestF9 vftable pointer)
394// CHECK-X64-NEXT: 8 | struct A4 (base)
395// CHECK-X64-NEXT: 8 | int a
396// CHECK-X64-NEXT: 16 | (TestF9 vbtable pointer)
397// CHECK-X64-NEXT: 24 | int a
398// CHECK-X64-NEXT: 32 | struct A4 (base)
399// CHECK-X64-NEXT: 32 | int a
400// CHECK-X64-NEXT: 36 | int a
401// CHECK-X64-NEXT: 48 | struct C16 (virtual base)
402// CHECK-X64-NEXT: 48 | (C16 vftable pointer)
403// CHECK-X64-NEXT: 64 | int a
404// CHECK-X64-NEXT: | [sizeof=80, align=16
405// CHECK-X64-NEXT: | nvsize=48, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000406
407struct TestFB : A16, virtual C16 {
408 int a;
409 TestFB() : a(0xf00000fb) {}
410 virtual void g() {printf("Fb");}
411};
412
413// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700414// CHECK-NEXT: 0 | struct TestFB
415// CHECK-NEXT: 0 | (TestFB vftable pointer)
416// CHECK-NEXT: 16 | struct A16 (base)
417// CHECK-NEXT: 16 | int a
418// CHECK-NEXT: 32 | (TestFB vbtable pointer)
419// CHECK-NEXT: 48 | int a
420// CHECK-NEXT: 64 | struct C16 (virtual base)
421// CHECK-NEXT: 64 | (C16 vftable pointer)
422// CHECK-NEXT: 80 | int a
423// CHECK-NEXT: | [sizeof=96, align=16
424// CHECK-NEXT: | nvsize=64, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000425// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700426// CHECK-X64-NEXT: 0 | struct TestFB
427// CHECK-X64-NEXT: 0 | (TestFB vftable pointer)
428// CHECK-X64-NEXT: 16 | struct A16 (base)
429// CHECK-X64-NEXT: 16 | int a
430// CHECK-X64-NEXT: 32 | (TestFB vbtable pointer)
431// CHECK-X64-NEXT: 48 | int a
432// CHECK-X64-NEXT: 64 | struct C16 (virtual base)
433// CHECK-X64-NEXT: 64 | (C16 vftable pointer)
434// CHECK-X64-NEXT: 80 | int a
435// CHECK-X64-NEXT: | [sizeof=96, align=16
436// CHECK-X64-NEXT: | nvsize=64, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000437
438struct TestFC : TestFB, A4 {
439 int a;
440 TestFC() : a(0xf00000fc) {}
441 virtual void g() {printf("FC");}
442};
443
444// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700445// CHECK-NEXT: 0 | struct TestFC
446// CHECK-NEXT: 0 | struct TestFB (primary base)
447// CHECK-NEXT: 0 | (TestFB vftable pointer)
448// CHECK-NEXT: 16 | struct A16 (base)
449// CHECK-NEXT: 16 | int a
450// CHECK-NEXT: 32 | (TestFB vbtable pointer)
451// CHECK-NEXT: 48 | int a
452// CHECK-NEXT: 64 | struct A4 (base)
453// CHECK-NEXT: 64 | int a
454// CHECK-NEXT: 68 | int a
455// CHECK-NEXT: 80 | struct C16 (virtual base)
456// CHECK-NEXT: 80 | (C16 vftable pointer)
457// CHECK-NEXT: 96 | int a
458// CHECK-NEXT: | [sizeof=112, align=16
459// CHECK-NEXT: | nvsize=80, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000460// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700461// CHECK-X64-NEXT: 0 | struct TestFC
462// CHECK-X64-NEXT: 0 | struct TestFB (primary base)
463// CHECK-X64-NEXT: 0 | (TestFB vftable pointer)
464// CHECK-X64-NEXT: 16 | struct A16 (base)
465// CHECK-X64-NEXT: 16 | int a
466// CHECK-X64-NEXT: 32 | (TestFB vbtable pointer)
467// CHECK-X64-NEXT: 48 | int a
468// CHECK-X64-NEXT: 64 | struct A4 (base)
469// CHECK-X64-NEXT: 64 | int a
470// CHECK-X64-NEXT: 68 | int a
471// CHECK-X64-NEXT: 80 | struct C16 (virtual base)
472// CHECK-X64-NEXT: 80 | (C16 vftable pointer)
473// CHECK-X64-NEXT: 96 | int a
474// CHECK-X64-NEXT: | [sizeof=112, align=16
475// CHECK-X64-NEXT: | nvsize=80, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000476
477
478struct A16f {
479 __declspec(align(16)) int a;
480 A16f() : a(0xf0000a16) {}
481 virtual void f() {printf("A16f");}
482};
483
484struct Y { char y; Y() : y(0xaa) {} };
485struct X : virtual A16f {};
486
487struct B : A4, Y, X {
488 int a;
489 B() : a(0xf000000b) {}
490};
491
492struct F0 : A4, B {
493 int a;
494 F0() : a(0xf00000f0) {}
495 virtual void g() {printf("F0");}
496};
497
498// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700499// CHECK: *** Dumping AST Record Layout
500// CHECK: *** Dumping AST Record Layout
501// CHECK: *** Dumping AST Record Layout
502// CHECK: *** Dumping AST Record Layout
503// CHECK-NEXT: 0 | struct F0
504// CHECK-NEXT: 0 | (F0 vftable pointer)
505// CHECK-NEXT: 16 | struct A4 (base)
506// CHECK-NEXT: 16 | int a
507// CHECK-NEXT: 32 | struct B (base)
508// CHECK-NEXT: 32 | struct A4 (base)
509// CHECK-NEXT: 32 | int a
510// CHECK-NEXT: 36 | struct Y (base)
511// CHECK-NEXT: 36 | char y
512// CHECK-NEXT: 48 | struct X (base)
513// CHECK-NEXT: 48 | (X vbtable pointer)
514// CHECK-NEXT: 52 | int a
515// CHECK-NEXT: 64 | int a
516// CHECK-NEXT: 80 | struct A16f (virtual base)
517// CHECK-NEXT: 80 | (A16f vftable pointer)
518// CHECK-NEXT: 96 | int a
519// CHECK-NEXT: | [sizeof=112, align=16
520// CHECK-NEXT: | nvsize=80, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000521// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700522// CHECK-X64: *** Dumping AST Record Layout
523// CHECK-X64: *** Dumping AST Record Layout
524// CHECK-X64: *** Dumping AST Record Layout
525// CHECK-X64: *** Dumping AST Record Layout
526// CHECK-X64-NEXT: 0 | struct F0
527// CHECK-X64-NEXT: 0 | (F0 vftable pointer)
528// CHECK-X64-NEXT: 16 | struct A4 (base)
529// CHECK-X64-NEXT: 16 | int a
530// CHECK-X64-NEXT: 32 | struct B (base)
531// CHECK-X64-NEXT: 32 | struct A4 (base)
532// CHECK-X64-NEXT: 32 | int a
533// CHECK-X64-NEXT: 36 | struct Y (base)
534// CHECK-X64-NEXT: 36 | char y
535// CHECK-X64-NEXT: 48 | struct X (base)
536// CHECK-X64-NEXT: 48 | (X vbtable pointer)
537// CHECK-X64-NEXT: 56 | int a
538// CHECK-X64-NEXT: 64 | int a
539// CHECK-X64-NEXT: 80 | struct A16f (virtual base)
540// CHECK-X64-NEXT: 80 | (A16f vftable pointer)
541// CHECK-X64-NEXT: 96 | int a
542// CHECK-X64-NEXT: | [sizeof=112, align=16
543// CHECK-X64-NEXT: | nvsize=80, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000544
545struct F1 : B, A4 {
546 int a;
547 F1() : a(0xf00000f1) {}
548 virtual void g() {printf("F1");}
549};
550
551// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700552// CHECK-NEXT: 0 | struct F1
553// CHECK-NEXT: 0 | (F1 vftable pointer)
554// CHECK-NEXT: 16 | struct B (base)
555// CHECK-NEXT: 16 | struct A4 (base)
556// CHECK-NEXT: 16 | int a
557// CHECK-NEXT: 20 | struct Y (base)
558// CHECK-NEXT: 20 | char y
559// CHECK-NEXT: 32 | struct X (base)
560// CHECK-NEXT: 32 | (X vbtable pointer)
561// CHECK-NEXT: 36 | int a
562// CHECK-NEXT: 48 | struct A4 (base)
563// CHECK-NEXT: 48 | int a
564// CHECK-NEXT: 52 | int a
565// CHECK-NEXT: 64 | struct A16f (virtual base)
566// CHECK-NEXT: 64 | (A16f vftable pointer)
567// CHECK-NEXT: 80 | int a
568// CHECK-NEXT: | [sizeof=96, align=16
569// CHECK-NEXT: | nvsize=64, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000570// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700571// CHECK-X64-NEXT: 0 | struct F1
572// CHECK-X64-NEXT: 0 | (F1 vftable pointer)
573// CHECK-X64-NEXT: 16 | struct B (base)
574// CHECK-X64-NEXT: 16 | struct A4 (base)
575// CHECK-X64-NEXT: 16 | int a
576// CHECK-X64-NEXT: 20 | struct Y (base)
577// CHECK-X64-NEXT: 20 | char y
578// CHECK-X64-NEXT: 32 | struct X (base)
579// CHECK-X64-NEXT: 32 | (X vbtable pointer)
580// CHECK-X64-NEXT: 40 | int a
581// CHECK-X64-NEXT: 48 | struct A4 (base)
582// CHECK-X64-NEXT: 48 | int a
583// CHECK-X64-NEXT: 52 | int a
584// CHECK-X64-NEXT: 64 | struct A16f (virtual base)
585// CHECK-X64-NEXT: 64 | (A16f vftable pointer)
586// CHECK-X64-NEXT: 80 | int a
587// CHECK-X64-NEXT: | [sizeof=96, align=16
588// CHECK-X64-NEXT: | nvsize=64, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000589
590struct F2 : A4, virtual A16f {
591 int a;
592 F2() : a(0xf00000f2) {}
593 virtual void g() {printf("F2");}
594};
595
596// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700597// CHECK-NEXT: 0 | struct F2
598// CHECK-NEXT: 0 | (F2 vftable pointer)
599// CHECK-NEXT: 4 | struct A4 (base)
600// CHECK-NEXT: 4 | int a
601// CHECK-NEXT: 8 | (F2 vbtable pointer)
602// CHECK-NEXT: 12 | int a
603// CHECK-NEXT: 16 | struct A16f (virtual base)
604// CHECK-NEXT: 16 | (A16f vftable pointer)
605// CHECK-NEXT: 32 | int a
606// CHECK-NEXT: | [sizeof=48, align=16
607// CHECK-NEXT: | nvsize=16, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000608// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700609// CHECK-X64-NEXT: 0 | struct F2
610// CHECK-X64-NEXT: 0 | (F2 vftable pointer)
611// CHECK-X64-NEXT: 8 | struct A4 (base)
612// CHECK-X64-NEXT: 8 | int a
613// CHECK-X64-NEXT: 16 | (F2 vbtable pointer)
614// CHECK-X64-NEXT: 24 | int a
615// CHECK-X64-NEXT: 32 | struct A16f (virtual base)
616// CHECK-X64-NEXT: 32 | (A16f vftable pointer)
617// CHECK-X64-NEXT: 48 | int a
618// CHECK-X64-NEXT: | [sizeof=64, align=16
619// CHECK-X64-NEXT: | nvsize=32, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000620
621struct F3 : A4, virtual A16f {
622 __declspec(align(16)) int a;
623 F3() : a(0xf00000f3) {}
624 virtual void g() {printf("F3");}
625};
626
627// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700628// CHECK-NEXT: 0 | struct F3
629// CHECK-NEXT: 0 | (F3 vftable pointer)
630// CHECK-NEXT: 16 | struct A4 (base)
631// CHECK-NEXT: 16 | int a
632// CHECK-NEXT: 20 | (F3 vbtable pointer)
633// CHECK-NEXT: 48 | int a
634// CHECK-NEXT: 64 | struct A16f (virtual base)
635// CHECK-NEXT: 64 | (A16f vftable pointer)
636// CHECK-NEXT: 80 | int a
637// CHECK-NEXT: | [sizeof=96, align=16
638// CHECK-NEXT: | nvsize=64, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000639// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700640// CHECK-X64-NEXT: 0 | struct F3
641// CHECK-X64-NEXT: 0 | (F3 vftable pointer)
642// CHECK-X64-NEXT: 16 | struct A4 (base)
643// CHECK-X64-NEXT: 16 | int a
644// CHECK-X64-NEXT: 24 | (F3 vbtable pointer)
645// CHECK-X64-NEXT: 48 | int a
646// CHECK-X64-NEXT: 64 | struct A16f (virtual base)
647// CHECK-X64-NEXT: 64 | (A16f vftable pointer)
648// CHECK-X64-NEXT: 80 | int a
649// CHECK-X64-NEXT: | [sizeof=96, align=16
650// CHECK-X64-NEXT: | nvsize=64, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000651
652struct F4 : A4, B {
653 __declspec(align(16)) int a;
654 F4() : a(0xf00000f4) {}
655 virtual void g() {printf("F4");}
656};
657
658// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700659// CHECK-NEXT: 0 | struct F4
660// CHECK-NEXT: 0 | (F4 vftable pointer)
661// CHECK-NEXT: 16 | struct A4 (base)
662// CHECK-NEXT: 16 | int a
663// CHECK-NEXT: 32 | struct B (base)
664// CHECK-NEXT: 32 | struct A4 (base)
665// CHECK-NEXT: 32 | int a
666// CHECK-NEXT: 36 | struct Y (base)
667// CHECK-NEXT: 36 | char y
668// CHECK-NEXT: 48 | struct X (base)
669// CHECK-NEXT: 48 | (X vbtable pointer)
670// CHECK-NEXT: 52 | int a
671// CHECK-NEXT: 64 | int a
672// CHECK-NEXT: 80 | struct A16f (virtual base)
673// CHECK-NEXT: 80 | (A16f vftable pointer)
674// CHECK-NEXT: 96 | int a
675// CHECK-NEXT: | [sizeof=112, align=16
676// CHECK-NEXT: | nvsize=80, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000677// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700678// CHECK-X64-NEXT: 0 | struct F4
679// CHECK-X64-NEXT: 0 | (F4 vftable pointer)
680// CHECK-X64-NEXT: 16 | struct A4 (base)
681// CHECK-X64-NEXT: 16 | int a
682// CHECK-X64-NEXT: 32 | struct B (base)
683// CHECK-X64-NEXT: 32 | struct A4 (base)
684// CHECK-X64-NEXT: 32 | int a
685// CHECK-X64-NEXT: 36 | struct Y (base)
686// CHECK-X64-NEXT: 36 | char y
687// CHECK-X64-NEXT: 48 | struct X (base)
688// CHECK-X64-NEXT: 48 | (X vbtable pointer)
689// CHECK-X64-NEXT: 56 | int a
690// CHECK-X64-NEXT: 64 | int a
691// CHECK-X64-NEXT: 80 | struct A16f (virtual base)
692// CHECK-X64-NEXT: 80 | (A16f vftable pointer)
693// CHECK-X64-NEXT: 96 | int a
694// CHECK-X64-NEXT: | [sizeof=112, align=16
695// CHECK-X64-NEXT: | nvsize=80, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000696
697struct F5 : A16f, virtual A4 {
698 int a;
699 F5() : a(0xf00000f5) {}
700 virtual void g() {printf("F5");}
701};
702
703// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700704// CHECK-NEXT: 0 | struct F5
705// CHECK-NEXT: 0 | struct A16f (primary base)
706// CHECK-NEXT: 0 | (A16f vftable pointer)
707// CHECK-NEXT: 16 | int a
708// CHECK-NEXT: 32 | (F5 vbtable pointer)
709// CHECK-NEXT: 48 | int a
710// CHECK-NEXT: 64 | struct A4 (virtual base)
711// CHECK-NEXT: 64 | int a
712// CHECK-NEXT: | [sizeof=80, align=16
713// CHECK-NEXT: | nvsize=64, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000714// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700715// CHECK-X64-NEXT: 0 | struct F5
716// CHECK-X64-NEXT: 0 | struct A16f (primary base)
717// CHECK-X64-NEXT: 0 | (A16f vftable pointer)
718// CHECK-X64-NEXT: 16 | int a
719// CHECK-X64-NEXT: 32 | (F5 vbtable pointer)
720// CHECK-X64-NEXT: 48 | int a
721// CHECK-X64-NEXT: 64 | struct A4 (virtual base)
722// CHECK-X64-NEXT: 64 | int a
723// CHECK-X64-NEXT: | [sizeof=80, align=16
724// CHECK-X64-NEXT: | nvsize=64, nvalign=16]
Warren Huntdc581802013-10-14 19:08:58 +0000725
726struct F6 : virtual A16f, A4, virtual B {
727 int a;
728 F6() : a(0xf00000f6) {}
729 virtual void g() {printf("F6");}
730};
731
732// CHECK: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700733// CHECK-NEXT: 0 | struct F6
734// CHECK-NEXT: 0 | (F6 vftable pointer)
735// CHECK-NEXT: 4 | struct A4 (base)
736// CHECK-NEXT: 4 | int a
737// CHECK-NEXT: 8 | (F6 vbtable pointer)
738// CHECK-NEXT: 12 | int a
739// CHECK-NEXT: 16 | struct A16f (virtual base)
740// CHECK-NEXT: 16 | (A16f vftable pointer)
741// CHECK-NEXT: 32 | int a
742// CHECK-NEXT: 48 | struct B (virtual base)
743// CHECK-NEXT: 48 | struct A4 (base)
744// CHECK-NEXT: 48 | int a
745// CHECK-NEXT: 52 | struct Y (base)
746// CHECK-NEXT: 52 | char y
747// CHECK-NEXT: 64 | struct X (base)
748// CHECK-NEXT: 64 | (X vbtable pointer)
749// CHECK-NEXT: 68 | int a
750// CHECK-NEXT: | [sizeof=80, align=16
751// CHECK-NEXT: | nvsize=16, nvalign=16]
Warren Hunt7967c952013-10-23 23:53:07 +0000752// CHECK-X64: *** Dumping AST Record Layout
Stephen Hines651f13c2014-04-23 16:59:28 -0700753// CHECK-X64-NEXT: 0 | struct F6
754// CHECK-X64-NEXT: 0 | (F6 vftable pointer)
755// CHECK-X64-NEXT: 8 | struct A4 (base)
756// CHECK-X64-NEXT: 8 | int a
757// CHECK-X64-NEXT: 16 | (F6 vbtable pointer)
758// CHECK-X64-NEXT: 24 | int a
759// CHECK-X64-NEXT: 32 | struct A16f (virtual base)
760// CHECK-X64-NEXT: 32 | (A16f vftable pointer)
761// CHECK-X64-NEXT: 48 | int a
762// CHECK-X64-NEXT: 64 | struct B (virtual base)
763// CHECK-X64-NEXT: 64 | struct A4 (base)
764// CHECK-X64-NEXT: 64 | int a
765// CHECK-X64-NEXT: 68 | struct Y (base)
766// CHECK-X64-NEXT: 68 | char y
767// CHECK-X64-NEXT: 80 | struct X (base)
768// CHECK-X64-NEXT: 80 | (X vbtable pointer)
769// CHECK-X64-NEXT: 88 | int a
770// CHECK-X64-NEXT: | [sizeof=96, align=16
771// CHECK-X64-NEXT: | nvsize=32, nvalign=16]
772
773struct ArrayFieldOfRecords {
774 A4 InlineElts[2];
775};
776
777// CHECK: *** Dumping AST Record Layout
778// CHECK-NEXT: 0 | struct ArrayFieldOfRecords
779// CHECK-NEXT: 0 | struct A4 [2] InlineElts
780// CHECK-NEXT: | [sizeof=8, align=4
781// CHECK-NEXT: | nvsize=8, nvalign=4]
782// CHECK-X64: *** Dumping AST Record Layout
783// CHECK-X64-NEXT: 0 | struct ArrayFieldOfRecords
784// CHECK-X64-NEXT: 0 | struct A4 [2] InlineElts
785// CHECK-X64-NEXT: | [sizeof=8, align=4
786// CHECK-X64-NEXT: | nvsize=8, nvalign=4]
787
788struct ArrayOfArrayFieldOfRecords {
789 A4 InlineElts[2][2];
790};
791
792// CHECK: *** Dumping AST Record Layout
793// CHECK-NEXT: 0 | struct ArrayOfArrayFieldOfRecords
794// CHECK-NEXT: 0 | struct A4 [2][2] InlineElts
795// CHECK-NEXT: | [sizeof=16, align=4
796// CHECK-NEXT: | nvsize=16, nvalign=4]
797// CHECK-X64: *** Dumping AST Record Layout
798// CHECK-X64-NEXT: 0 | struct ArrayOfArrayFieldOfRecords
799// CHECK-X64-NEXT: 0 | struct A4 [2][2] InlineElts
800// CHECK-X64-NEXT: | [sizeof=16, align=4
801// CHECK-X64-NEXT: | nvsize=16, nvalign=4]
802
803struct RecordArrayTypedef {
804 typedef A4 ArrayTy[2];
805 ArrayTy InlineElts[2];
806};
807
808// CHECK: *** Dumping AST Record Layout
809// CHECK-NEXT: 0 | struct RecordArrayTypedef
810// CHECK-NEXT: 0 | ArrayTy [2] InlineElts
811// CHECK-NEXT: | [sizeof=16, align=4
812// CHECK-NEXT: | nvsize=16, nvalign=4]
813// CHECK-X64: *** Dumping AST Record Layout
814// CHECK-X64-NEXT: 0 | struct RecordArrayTypedef
815// CHECK-X64-NEXT: 0 | ArrayTy [2] InlineElts
816// CHECK-X64-NEXT: | [sizeof=16, align=4
817// CHECK-X64-NEXT: | nvsize=16, nvalign=4]
Warren Huntdc581802013-10-14 19:08:58 +0000818
Stephen Hines176edba2014-12-01 14:53:08 -0800819struct EmptyIntMemb {
820 int FlexArrayMemb[0];
821};
822
823// CHECK: *** Dumping AST Record Layout
824// CHECK-NEXT: 0 | struct EmptyIntMemb
825// CHECK-NEXT: 0 | int [0] FlexArrayMemb
826// CHECK-NEXT: | [sizeof=1, align=4
827// CHECK-NEXT: | nvsize=0, nvalign=4]
828// CHECK-X64: *** Dumping AST Record Layout
829// CHECK-X64-NEXT: 0 | struct EmptyIntMemb
830// CHECK-X64-NEXT: 0 | int [0] FlexArrayMemb
831// CHECK-X64-NEXT: | [sizeof=4, align=4
832// CHECK-X64-NEXT: | nvsize=0, nvalign=4]
833
834struct EmptyLongLongMemb {
835 long long FlexArrayMemb[0];
836};
837
838// CHECK: *** Dumping AST Record Layout
839// CHECK-NEXT: 0 | struct EmptyLongLongMemb
840// CHECK-NEXT: 0 | long long [0] FlexArrayMemb
841// CHECK-NEXT: | [sizeof=1, align=8
842// CHECK-NEXT: | nvsize=0, nvalign=8]
843// CHECK-X64: *** Dumping AST Record Layout
844// CHECK-X64-NEXT: 0 | struct EmptyLongLongMemb
845// CHECK-X64-NEXT: 0 | long long [0] FlexArrayMemb
846// CHECK-X64-NEXT: | [sizeof=8, align=8
847// CHECK-X64-NEXT: | nvsize=0, nvalign=8]
848
Warren Huntdc581802013-10-14 19:08:58 +0000849int a[
850sizeof(TestF0)+
851sizeof(TestF1)+
852sizeof(TestF2)+
853sizeof(TestF3)+
854sizeof(TestF4)+
855sizeof(TestF5)+
856sizeof(TestF6)+
857sizeof(TestF7)+
858sizeof(TestF8)+
859sizeof(TestF9)+
860sizeof(TestFA)+
861sizeof(TestFB)+
862sizeof(TestFC)+
863sizeof(F0)+
864sizeof(F1)+
865sizeof(F2)+
866sizeof(F3)+
867sizeof(F4)+
868sizeof(F5)+
Stephen Hines651f13c2014-04-23 16:59:28 -0700869sizeof(F6)+
870sizeof(ArrayFieldOfRecords)+
871sizeof(ArrayOfArrayFieldOfRecords)+
872sizeof(RecordArrayTypedef)+
Stephen Hines176edba2014-12-01 14:53:08 -0800873sizeof(EmptyIntMemb)+
874sizeof(EmptyLongLongMemb)+
Stephen Hines651f13c2014-04-23 16:59:28 -07008750];