ms-x86-vfvb-alignment.cpp revision 651f13cea278ec967336033dd032faef0e9fc2ec
1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>&1 \
2dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// RUN:            | FileCheck %s
3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
47967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// RUN:            | FileCheck %s -check-prefix CHECK-X64
5dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
6dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntextern "C" int printf(const char *fmt, ...);
7dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
8dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B0 { int a; B0() : a(0xf00000B0) {} };
9dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B1 { char a; B1() : a(0xB1) {} };
10dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B2 : virtual B1 { int a; B2() : a(0xf00000B2) {} };
11dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B3 { __declspec(align(16)) int a; B3() : a(0xf00000B3) {} };
12dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B4 : virtual B3 { int a; B4() : a(0xf00000B4) {} };
13dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B5 { __declspec(align(32)) int a; B5() : a(0xf00000B5) {} };
14dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B6 { int a; B6() : a(0xf00000B6) {} virtual void f() { printf("B6"); } };
15dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
16dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct A : B0, virtual B1 { __declspec(align(16)) int a; A() : a(0xf000000A) {} virtual void f() { printf("A"); } };
17dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
18dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct A
22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (A vftable pointer)
23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B0 (base)
24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |   (A vbtable pointer)
26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   int a
27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B1 (virtual base)
28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     char a
29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=16]
31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
327967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct A
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (A vftable pointer)
36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (base)
37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   (A vbtable pointer)
39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   int a
40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B1 (virtual base)
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     char a
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=16]
44dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
45dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B : A, B2 { int a; B() : a(0xf000000B) {} virtual void f() { printf("B"); } };
46dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
47dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct B
50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct A (primary base)
51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (A vftable pointer)
52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     struct B0 (base)
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |       int a
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |     (A vbtable pointer)
55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     int a
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B2 (base)
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     (B2 vbtable pointer)
58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   68 |     int a
59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |   int a
60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |   struct B1 (virtual base)
61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |     char a
62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=96, align=16
63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=80, nvalign=16]
64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
657967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct B
67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct A (primary base)
68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     (A vftable pointer)
69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     struct B0 (base)
70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |       int a
71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     (A vbtable pointer)
72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     int a
73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B2 (base)
74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     (B2 vbtable pointer)
75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |     int a
76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |   int a
77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   96 |   struct B1 (virtual base)
78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   96 |     char a
79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=112, align=16
80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=96, nvalign=16]
81dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
82dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct C : B4 { int a; C() : a(0xf000000C) {} virtual void f() { printf("C"); } };
83dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
84dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct C
88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (C vftable pointer)
89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B4 (base)
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     (B4 vbtable pointer)
91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |     int a
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   int a
93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct B3 (virtual base)
94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     int a
95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=48, align=16
96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=32, nvalign=16]
97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct C
101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (C vftable pointer)
102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B4 (base)
103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     (B4 vbtable pointer)
104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a
105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct B3 (virtual base)
107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     int a
108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=64, align=16
109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=48, nvalign=16]
110dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
111dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct D : C { int a; D() : a(0xf000000D) {} virtual void f() { printf("D"); } };
112dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
113dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct D
115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct C (primary base)
116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (C vftable pointer)
117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     struct B4 (base)
118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |       (B4 vbtable pointer)
119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |       int a
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |     int a
121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct B3 (virtual base)
123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     int a
124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=64, align=16
125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=48, nvalign=16]
1267967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct D
128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct C (primary base)
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     (C vftable pointer)
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     struct B4 (base)
131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |       (B4 vbtable pointer)
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |       int a
133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     int a
134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   int a
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B3 (virtual base)
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=16]
139dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
140dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct E : virtual C { int a; E() : a(0xf000000E) {} virtual void f() { printf("E"); } };
141dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
142dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct E
144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (E vbtable pointer)
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B3 (virtual base)
147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   44 |   (vtordisp for vbase C)
149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct C (virtual base)
150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     (C vftable pointer)
151651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     struct B4 (base)
152651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |       (B4 vbtable pointer)
153651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   68 |       int a
154651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |     int a
155651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
156651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=16]
1577967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
158651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct E
159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (E vbtable pointer)
160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B3 (virtual base)
162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   44 |   (vtordisp for vbase C)
164651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct C (virtual base)
165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     (C vftable pointer)
166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     struct B4 (base)
167651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |       (B4 vbtable pointer)
168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |       int a
169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |     int a
170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=96, align=16
171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=16]
172dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
173dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F : B3, virtual B0 { int a; F() : a(0xf000000F) {} virtual void f() { printf("F"); } };
174dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
175dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct F
177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (F vftable pointer)
178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B3 (base)
179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   (F vbtable pointer)
181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   int a
182651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B0 (virtual base)
183651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     int a
184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
185651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=16]
1867967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct F
188651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (F vftable pointer)
189651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B3 (base)
190651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   (F vbtable pointer)
192651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   int a
193651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B0 (virtual base)
194651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=16]
197dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
198dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct G : B2, B6, virtual B1 { int a; G() : a(0xf0000010) {} };
199dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
200dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
201651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct G
203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B6 (primary base)
204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (B6 vftable pointer)
205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     int a
206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct B2 (base)
207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     (B2 vbtable pointer)
208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     int a
209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   int a
210651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |   struct B1 (virtual base)
211651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |     char a
212651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=21, align=4
213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=20, nvalign=4]
214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
2157967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
216651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct G
217651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B6 (primary base)
218651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     (B6 vftable pointer)
219651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     int a
220651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B2 (base)
221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     (B2 vbtable pointer)
222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a
223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   struct B1 (virtual base)
225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |     char a
226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=48, align=8
227651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=40, nvalign=8]
228dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
229dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct H : B6, B2, virtual B1 { int a; H() : a(0xf0000011) {} };
230dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
231dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
232651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct H
233651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B6 (primary base)
234651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (B6 vftable pointer)
235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     int a
236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct B2 (base)
237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     (B2 vbtable pointer)
238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     int a
239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   int a
240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |   struct B1 (virtual base)
241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |     char a
242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=21, align=4
243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=20, nvalign=4]
2447967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
245651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct H
246651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B6 (primary base)
247651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     (B6 vftable pointer)
248651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     int a
249651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B2 (base)
250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     (B2 vbtable pointer)
251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a
252651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   struct B1 (virtual base)
254651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |     char a
255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=48, align=8
256651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=40, nvalign=8]
257dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
258dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct I : B0, virtual B1 { int a; int a1; __declspec(align(16)) int a2; I() : a(0xf0000011), a1(0xf0000011), a2(0xf0000011) {} };
259dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
260dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct I
262651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B0 (base)
263651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
264651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   (I vbtable pointer)
265651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |   int a
266651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   int a1
267651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a2
268651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct B1 (virtual base)
269651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     char a
270651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=64, align=16
271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=48, nvalign=16]
2727967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
273651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct I
274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B0 (base)
275651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   (I vbtable pointer)
277651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |   int a
278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   int a1
279651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a2
280651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct B1 (virtual base)
281651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |     char a
282651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=64, align=16
283651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=48, nvalign=16]
284dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
285dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct J : B0, B3, virtual B1 { int a; int a1; J() : a(0xf0000012), a1(0xf0000012) {} };
286dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
287dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct J
289651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B0 (base)
290651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     int a
291651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B3 (base)
292651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
293651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   (J vbtable pointer)
294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   int a
295651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   52 |   int a1
296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B1 (virtual base)
297651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     char a
298651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=80, align=16
299651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=16]
3007967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
301651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct J
302651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B0 (base)
303651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     int a
304651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B3 (base)
305651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
306651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   (J vbtable pointer)
307651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   int a
308651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   52 |   int a1
309651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B1 (virtual base)
310651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     char a
311651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
312651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=16]
313dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
314dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct K { int a; K() : a(0xf0000013) {} virtual void f() { printf("K"); } };
315dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
316dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
317651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct K
318651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (K vftable pointer)
319651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
320651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=8, align=4
321651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
3227967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
323651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct K
324651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (K vftable pointer)
325651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
326651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=8
327651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
328dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
329dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct L : virtual K { int a; L() : a(0xf0000014) {} virtual void g() { printf("L"); } };
330dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
331dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
332651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct L
333651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (L vftable pointer)
334651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   (L vbtable pointer)
335651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   int a
336651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   struct K (virtual base)
337651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     (K vftable pointer)
338651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
339651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=20, align=4
340651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=12, nvalign=4]
3417967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
342651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct L
343651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (L vftable pointer)
344651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   (L vbtable pointer)
345651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   int a
346651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct K (virtual base)
347651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     (K vftable pointer)
348651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     int a
349651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=40, align=8
350651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]
351dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
352dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct M : virtual K { int a; M() : a(0xf0000015) {} virtual void f() { printf("M"); } };
353dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
354dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
355651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct M
356651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (M vbtable pointer)
357651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
358651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   (vtordisp for vbase K)
359651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   struct K (virtual base)
360651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     (K vftable pointer)
361651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
362651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=20, align=4
363651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
3647967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
365651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct M
366651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (M vbtable pointer)
367651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
368651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |   (vtordisp for vbase K)
369651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct K (virtual base)
370651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     (K vftable pointer)
371651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     int a
372651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=40, align=8
373651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
374dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
375dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntint a[
376dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(A)+
377dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(B)+
378dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(C)+
379dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(D)+
380dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(E)+
381dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F)+
382dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(G)+
383dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(H)+
384dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(I)+
385dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(J)+
386dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(K)+
387dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(L)+
388dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(M)];
389