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
87967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct __declspec(align(8)) B0 { B0() {printf("B0 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
97967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct __declspec(align(8)) B1 { B1() {printf("B1 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
107967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct __declspec(align(8)) B2 { B2() {printf("B2 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
117967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct __declspec(align(8)) B3 { B3() {printf("B3 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
127967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct __declspec(align(8)) B4 { B4() {printf("B4 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
13dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
147967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct C0 { int a; C0() : a(0xf00000C0) {printf("C0 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
157967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct C1 { int a; C1() : a(0xf00000C1) {printf("C1 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
167967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct C2 { int a; C2() : a(0xf00000C2) {printf("C2 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
177967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct C3 { int a; C3() : a(0xf00000C3) {printf("C3 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
187967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct C4 { int a; C4() : a(0xf00000C4) {printf("C4 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
19dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
207967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct __declspec(align(16)) D0 { D0() {printf("D0 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} virtual void f() {} };
217967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct D1 { D1() {printf("D1 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
227967c95891c5f65f6312fbbcb999ac257d776914Warren Huntstruct D2 { int a[8]; D2() {printf("D2 : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);} };
23dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
24dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct A : virtual B0 {
25dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
267967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	A() : a(0xf000000A) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
27dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
28dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
29dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct A
32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (A vbtable pointer)
33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct B0 (virtual base) (empty)
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=8, align=8
36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=8]
37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
387967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct A
40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (A vbtable pointer)
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (virtual base) (empty)
43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=8
44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
45dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
46dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B : virtual B0 {
47dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B0 b0;
48dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
497967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	B() : a(0xf000000B) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
50dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
51dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
52dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct B
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (B vbtable pointer)
55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct B0 b0 (empty)
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |   [sizeof=8, align=8
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |    nvsize=0, nvalign=8]
58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:        16 |   int a
59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   struct B0 (virtual base) (empty)
60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=24, align=8
61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=24, nvalign=8]
62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct B
64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (B vbtable pointer)
65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   struct B0 b0 (empty)
66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |   [sizeof=8, align=8
67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |    nvsize=0, nvalign=8]
68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:        16 |   int a
69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct B0 (virtual base) (empty)
70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]
72dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
73dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct C : virtual B0, virtual B1, virtual B2, virtual B3, virtual B4 {
74dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
757967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	C() : a(0xf000000C) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
76dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
77dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
78dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct C
84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (C vbtable pointer)
85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct B0 (virtual base) (empty)
87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B1 (virtual base) (empty)
88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   struct B2 (virtual base) (empty)
89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct B3 (virtual base) (empty)
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   40 |   struct B4 (virtual base) (empty)
91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=40, align=8
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=8]
93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct C
99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (C vbtable pointer)
100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (virtual base) (empty)
102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct B1 (virtual base) (empty)
103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct B2 (virtual base) (empty)
104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   struct B3 (virtual base) (empty)
105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   48 |   struct B4 (virtual base) (empty)
106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=48, align=8
107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
108dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
109dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct D {
110dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B0 b0;
111dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	C0 c0;
112dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	C1 c1;
113dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	C2 c2;
114dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	B1 b1;
115dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
1167967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	D() : a(0xf000000D) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
117dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
118dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
119dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct D
124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B0 b0 (empty)
125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:         8 |   struct C0 c0
126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     int a
127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:        12 |   struct C1 c1
128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     int a
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:        16 |   struct C2 c2
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:        24 |   struct B1 b1 (empty)
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK:        32 |   int a
133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=40, align=8
134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=40, nvalign=8]
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct D
140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B0 b0 (empty)
141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:         8 |   struct C0 c0
142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     int a
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:        12 |   struct C1 c1
144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   12 |     int a
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:        16 |   struct C2 c2
146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:        24 |   struct B1 b1 (empty)
148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64:        32 |   int a
149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=40, align=8
150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=40, nvalign=8]
151dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
152dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct E : virtual B0, virtual C0, virtual C1, virtual C2, virtual B1 {
153dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
1547967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	E() : a(0xf000000E) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
155dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
156dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
157dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
158651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct E
159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (E vbtable pointer)
160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct B0 (virtual base) (empty)
162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct C0 (virtual base)
163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     int a
164651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   struct C1 (virtual base)
165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     int a
166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct C2 (virtual base)
167651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     int a
168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   struct B1 (virtual base) (empty)
169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=24, align=8
170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=8]
171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct E
173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (E vbtable pointer)
174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (virtual base) (empty)
176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct C0 (virtual base)
177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |   struct C1 (virtual base)
179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   20 |     int a
180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct C2 (virtual base)
181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |     int a
182651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct B1 (virtual base) (empty)
183651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=32, align=8
184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
185dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
186dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F : virtual C0, virtual B0, virtual B1, virtual C1 {
187dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
1887967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	F() : a(0xf000000F) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
189dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
190dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
191dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
192651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct F
193651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (F vbtable pointer)
194651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct C0 (virtual base)
196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     int a
197651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B0 (virtual base) (empty)
198651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   struct B1 (virtual base) (empty)
199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   struct C1 (virtual base)
200651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |     int a
201651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=32, align=8
202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=8]
203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct F
205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (F vbtable pointer)
206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct C0 (virtual base)
208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct B0 (virtual base) (empty)
210651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct B1 (virtual base) (empty)
211651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct C1 (virtual base)
212651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     int a
213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=40, align=8
214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
215dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
216dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct G : virtual C0, virtual B0, virtual B1, D0, virtual C1 {
217dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
2187967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	G() : a(0xf0000010) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
219dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {}
220dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
221dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
222dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct G
225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct D0 (primary base)
226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (D0 vftable pointer)
227651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   (G vbtable pointer)
228651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   20 |   int a
229651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct C0 (virtual base)
230651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |     int a
231651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   40 |   struct B0 (virtual base) (empty)
232651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   56 |   struct B1 (virtual base) (empty)
233651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   56 |   struct C1 (virtual base)
234651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   56 |     int a
235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=64, align=16
236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=32, nvalign=16]
237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct G
240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct D0 (primary base)
241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     (D0 vftable pointer)
242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   (G vbtable pointer)
243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   int a
244651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct C0 (virtual base)
245651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |     int a
246651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   struct B0 (virtual base) (empty)
247651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   56 |   struct B1 (virtual base) (empty)
248651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   56 |   struct C1 (virtual base)
249651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   56 |     int a
250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=64, align=16
251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=32, nvalign=16]
252dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
253dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct H : virtual C0, virtual B0, virtual B1, virtual D0, virtual C1 {
254dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
2557967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	H() : a(0xf0000011) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
256dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	virtual void f() {}
257dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
258dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
259dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
260651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct H
261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (H vbtable pointer)
262651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
263651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct C0 (virtual base)
264651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     int a
265651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct B0 (virtual base) (empty)
266651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   struct B1 (virtual base) (empty)
267651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   44 |   (vtordisp for vbase D0)
268651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |   struct D0 (virtual base)
269651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   48 |     (D0 vftable pointer)
270651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   52 |   struct C1 (virtual base)
271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   52 |     int a
272651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=64, align=16
273651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=16]
274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
275651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct H
276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (H vbtable pointer)
277651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct C0 (virtual base)
279651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     int a
280651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct B0 (virtual base) (empty)
281651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   struct B1 (virtual base) (empty)
282651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   60 |   (vtordisp for vbase D0)
283651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct D0 (virtual base)
284651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     (D0 vftable pointer)
285651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |   struct C1 (virtual base)
286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |     int a
287651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=80, align=16
288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=16]
289dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
290dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct I : virtual B0, virtual B1, virtual B2, virtual B3, virtual B4 {
291dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(32)) int a;
2927967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	I() : a(0xf0000012) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
293dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
294dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
295dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct I
297651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (I vbtable pointer)
298651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
299651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B0 (virtual base) (empty)
300651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |   struct B1 (virtual base) (empty)
301651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  104 |   struct B2 (virtual base) (empty)
302651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  136 |   struct B3 (virtual base) (empty)
303651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  168 |   struct B4 (virtual base) (empty)
304651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=192, align=32
305651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=32]
306651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
307651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct I
308651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (I vbtable pointer)
309651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
310651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B0 (virtual base) (empty)
311651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |   struct B1 (virtual base) (empty)
312651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |   struct B2 (virtual base) (empty)
313651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  136 |   struct B3 (virtual base) (empty)
314651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  168 |   struct B4 (virtual base) (empty)
315651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=192, align=32
316651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=32]
317dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
318dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(32)) J : virtual B0, virtual B1, virtual B2, virtual B3, virtual B4 {
319dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
3207967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	J() : a(0xf0000012) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
321dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
322dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
323dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
324651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct J
325651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (J vbtable pointer)
326651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
327651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct B0 (virtual base) (empty)
328651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   40 |   struct B1 (virtual base) (empty)
329651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |   struct B2 (virtual base) (empty)
330651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  104 |   struct B3 (virtual base) (empty)
331651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  136 |   struct B4 (virtual base) (empty)
332651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=160, align=32
333651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=32]
334651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
335651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct J
336651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (J vbtable pointer)
337651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
338651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (virtual base) (empty)
339651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   struct B1 (virtual base) (empty)
340651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |   struct B2 (virtual base) (empty)
341651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |   struct B3 (virtual base) (empty)
342651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  136 |   struct B4 (virtual base) (empty)
343651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=160, align=32
344651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=32]
345dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
346dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct K : virtual D1, virtual B1, virtual B2, virtual B3, virtual B4 {
347dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(32)) int a;
3487967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	K() : a(0xf0000013) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
349dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
350dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
351dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
352651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
353651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct K
354651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (K vbtable pointer)
355651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
356651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct D1 (virtual base) (empty)
357651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |   struct B1 (virtual base) (empty)
358651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  104 |   struct B2 (virtual base) (empty)
359651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  136 |   struct B3 (virtual base) (empty)
360651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  168 |   struct B4 (virtual base) (empty)
361651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=192, align=32
362651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=32]
363651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
364651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
365651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct K
366651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (K vbtable pointer)
367651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
368651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct D1 (virtual base) (empty)
369651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |   struct B1 (virtual base) (empty)
370651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |   struct B2 (virtual base) (empty)
371651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  136 |   struct B3 (virtual base) (empty)
372651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  168 |   struct B4 (virtual base) (empty)
373651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=192, align=32
374651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=32]
375dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
376dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct L : virtual B1, virtual D1, virtual B2, virtual B3, virtual B4 {
377dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(32)) int a;
3787967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	L() : a(0xf0000014) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
379dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
380dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
381dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
382651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct L
383651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (L vbtable pointer)
384651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
385651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B1 (virtual base) (empty)
386651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   68 |   struct D1 (virtual base) (empty)
387651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  104 |   struct B2 (virtual base) (empty)
388651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  136 |   struct B3 (virtual base) (empty)
389651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  168 |   struct B4 (virtual base) (empty)
390651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=192, align=32
391651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=32]
392651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
393651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct L
394651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (L vbtable pointer)
395651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
396651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B1 (virtual base) (empty)
397651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   68 |   struct D1 (virtual base) (empty)
398651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |   struct B2 (virtual base) (empty)
399651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  136 |   struct B3 (virtual base) (empty)
400651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  168 |   struct B4 (virtual base) (empty)
401651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=192, align=32
402651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=32]
403dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
404dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct M : virtual B1, virtual B2, virtual D1, virtual B3, virtual B4 {
405dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(32)) int a;
4067967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	M() : a(0xf0000015) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
407dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
408dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
409dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
410651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct M
411651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (M vbtable pointer)
412651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
413651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B1 (virtual base) (empty)
414651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |   struct B2 (virtual base) (empty)
415651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  100 |   struct D1 (virtual base) (empty)
416651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  136 |   struct B3 (virtual base) (empty)
417651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  168 |   struct B4 (virtual base) (empty)
418651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=192, align=32
419651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=32]
420651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
421651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct M
422651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (M vbtable pointer)
423651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
424651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B1 (virtual base) (empty)
425651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |   struct B2 (virtual base) (empty)
426651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  100 |   struct D1 (virtual base) (empty)
427651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  136 |   struct B3 (virtual base) (empty)
428651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  168 |   struct B4 (virtual base) (empty)
429651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=192, align=32
430651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=32]
431dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
432dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct N : virtual C0, virtual B1, virtual D1, virtual B2, virtual B3, virtual B4 {
433dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(32)) int a;
4347967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	N() : a(0xf0000016) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
435dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
436dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
437dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
438651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct N
439651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (N vbtable pointer)
440651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
441651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct C0 (virtual base)
442651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     int a
443651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |   struct B1 (virtual base) (empty)
444651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  100 |   struct D1 (virtual base) (empty)
445651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  136 |   struct B2 (virtual base) (empty)
446651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  168 |   struct B3 (virtual base) (empty)
447651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  200 |   struct B4 (virtual base) (empty)
448651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=224, align=32
449651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=32]
450651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
451651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct N
452651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (N vbtable pointer)
453651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
454651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct C0 (virtual base)
455651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
456651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |   struct B1 (virtual base) (empty)
457651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  100 |   struct D1 (virtual base) (empty)
458651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  136 |   struct B2 (virtual base) (empty)
459651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  168 |   struct B3 (virtual base) (empty)
460651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  200 |   struct B4 (virtual base) (empty)
461651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=224, align=32
462651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=32]
463dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
464dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct O : virtual C0, virtual B1, virtual B2, virtual D1, virtual B3, virtual B4 {
465dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(32)) int a;
4667967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	O() : a(0xf0000017) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
467dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
468dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
469dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
470651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct O
471651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (O vbtable pointer)
472651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
473651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct C0 (virtual base)
474651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     int a
475651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |   struct B1 (virtual base) (empty)
476651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  104 |   struct B2 (virtual base) (empty)
477651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  132 |   struct D1 (virtual base) (empty)
478651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  168 |   struct B3 (virtual base) (empty)
479651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  200 |   struct B4 (virtual base) (empty)
480651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=224, align=32
481651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=32]
482651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
483651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct O
484651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (O vbtable pointer)
485651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
486651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct C0 (virtual base)
487651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
488651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |   struct B1 (virtual base) (empty)
489651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |   struct B2 (virtual base) (empty)
490651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  132 |   struct D1 (virtual base) (empty)
491651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  168 |   struct B3 (virtual base) (empty)
492651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  200 |   struct B4 (virtual base) (empty)
493651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=224, align=32
494651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=32]
495dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
496dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct P : virtual B1, virtual C0, virtual D1, virtual B2, virtual B3, virtual B4 {
497dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(32)) int a;
4987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	P() : a(0xf0000018) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
499dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
500dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
501dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
502651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct P
503651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (P vbtable pointer)
504651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
505651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B1 (virtual base) (empty)
506651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct C0 (virtual base)
507651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     int a
508651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   68 |   struct D1 (virtual base) (empty)
509651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  104 |   struct B2 (virtual base) (empty)
510651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  136 |   struct B3 (virtual base) (empty)
511651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  168 |   struct B4 (virtual base) (empty)
512651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=192, align=32
513651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=32]
514651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
515651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct P
516651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (P vbtable pointer)
517651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
518651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B1 (virtual base) (empty)
519651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct C0 (virtual base)
520651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
521651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   68 |   struct D1 (virtual base) (empty)
522651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |   struct B2 (virtual base) (empty)
523651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  136 |   struct B3 (virtual base) (empty)
524651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  168 |   struct B4 (virtual base) (empty)
525651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=192, align=32
526651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=32]
527dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
528dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct Q : virtual B1, virtual C0, virtual B2, virtual D1, virtual B3, virtual B4 {
529dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(32)) int a;
5307967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	Q() : a(0xf0000019) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
531dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
532dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
533dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
534651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct Q
535651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (Q vbtable pointer)
536651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
537651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B1 (virtual base) (empty)
538651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct C0 (virtual base)
539651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |     int a
540651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |   struct B2 (virtual base) (empty)
541651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  100 |   struct D1 (virtual base) (empty)
542651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  136 |   struct B3 (virtual base) (empty)
543651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  168 |   struct B4 (virtual base) (empty)
544651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=192, align=32
545651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=32]
546651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
547651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct Q
548651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (Q vbtable pointer)
549651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
550651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B1 (virtual base) (empty)
551651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct C0 (virtual base)
552651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |     int a
553651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |   struct B2 (virtual base) (empty)
554651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  100 |   struct D1 (virtual base) (empty)
555651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  136 |   struct B3 (virtual base) (empty)
556651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  168 |   struct B4 (virtual base) (empty)
557651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=192, align=32
558651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=32]
559dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
560dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct R : virtual B0, virtual B1, virtual B2, virtual C0, virtual B3, virtual B4 {
561dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(32)) int a;
5627967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	R() : a(0xf0000020) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
563dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
564dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
565dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
566651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct R
567651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (R vbtable pointer)
568651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
569651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B0 (virtual base) (empty)
570651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |   struct B1 (virtual base) (empty)
571651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  104 |   struct B2 (virtual base) (empty)
572651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  104 |   struct C0 (virtual base)
573651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  104 |     int a
574651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  112 |   struct B3 (virtual base) (empty)
575651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  136 |   struct B4 (virtual base) (empty)
576651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=160, align=32
577651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=32]
578651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
579651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct R
580651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (R vbtable pointer)
581651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
582651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B0 (virtual base) (empty)
583651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |   struct B1 (virtual base) (empty)
584651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |   struct B2 (virtual base) (empty)
585651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |   struct C0 (virtual base)
586651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |     int a
587651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  112 |   struct B3 (virtual base) (empty)
588651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  136 |   struct B4 (virtual base) (empty)
589651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=160, align=32
590651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=32]
591dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
592dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct S : virtual B0, virtual B1, virtual C0, virtual B2, virtual B3, virtual B4 {
593dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(32)) int a;
5947967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	S() : a(0xf0000021) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
595dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
596dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
597dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
598651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct S
599651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (S vbtable pointer)
600651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   int a
601651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   64 |   struct B0 (virtual base) (empty)
602651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |   struct B1 (virtual base) (empty)
603651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |   struct C0 (virtual base)
604651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   72 |     int a
605651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |   struct B2 (virtual base) (empty)
606651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  104 |   struct B3 (virtual base) (empty)
607651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  136 |   struct B4 (virtual base) (empty)
608651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=160, align=32
609651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=64, nvalign=32]
610651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
611651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct S
612651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (S vbtable pointer)
613651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   int a
614651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   64 |   struct B0 (virtual base) (empty)
615651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |   struct B1 (virtual base) (empty)
616651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |   struct C0 (virtual base)
617651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   72 |     int a
618651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |   struct B2 (virtual base) (empty)
619651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |   struct B3 (virtual base) (empty)
620651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  136 |   struct B4 (virtual base) (empty)
621651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=160, align=32
622651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=64, nvalign=32]
623dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
624dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct T : virtual B0, virtual B1, virtual C0, virtual D2, virtual B2, virtual B3, virtual B4 {
625dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	__declspec(align(16)) int a;
6267967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	T() : a(0xf0000022) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
627dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
628dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
629dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
630651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
631651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct T
632651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (T vbtable pointer)
633651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   int a
634651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   32 |   struct B0 (virtual base) (empty)
635651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   40 |   struct B1 (virtual base) (empty)
636651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   40 |   struct C0 (virtual base)
637651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   40 |     int a
638651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   44 |   struct D2 (virtual base)
639651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   44 |     int [8] a
640651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   80 |   struct B2 (virtual base) (empty)
641651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   88 |   struct B3 (virtual base) (empty)
642651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  104 |   struct B4 (virtual base) (empty)
643651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=112, align=16
644651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=32, nvalign=16]
645651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
646651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
647651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct T
648651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (T vbtable pointer)
649651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   int a
650651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   32 |   struct B0 (virtual base) (empty)
651651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   struct B1 (virtual base) (empty)
652651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   struct C0 (virtual base)
653651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |     int a
654651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   44 |   struct D2 (virtual base)
655651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   44 |     int [8] a
656651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   80 |   struct B2 (virtual base) (empty)
657651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   88 |   struct B3 (virtual base) (empty)
658651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  104 |   struct B4 (virtual base) (empty)
659651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=112, align=16
660651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=32, nvalign=16]
661dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
662dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(32)) U : virtual B0, virtual B1 {
663dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
6647967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	U() : a(0xf0000023) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
665dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
666dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
667dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
668651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct U
669651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (U vbtable pointer)
670651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
671651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct B0 (virtual base) (empty)
672651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   40 |   struct B1 (virtual base) (empty)
673651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=64, align=32
674651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=32]
6757967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
676651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct U
677651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (U vbtable pointer)
678651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
679651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B0 (virtual base) (empty)
680651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   40 |   struct B1 (virtual base) (empty)
681651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=64, align=32
682651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=32]
683dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
684dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(32)) V : virtual D1 {
685dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt	int a;
6867967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt	V() : a(0xf0000024) {printf("X : %3d\n", ((int)(__SIZE_TYPE__)this)&0xfff);}
687dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt};
688dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
689dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout
690651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct V
691651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (V vbtable pointer)
692651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   int a
693651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct D1 (virtual base) (empty)
694651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=32, align=32
695651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=32]
696651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
697651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct V
698651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (V vbtable pointer)
699651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   int a
700651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct D1 (virtual base) (empty)
701651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=32, align=32
702651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=32]
703651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
704651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct T0 {};
705651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct T1 : T0 { char a; };
706651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct T3 : virtual T1, virtual T0 { long long a; };
707651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
708651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
709651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
710651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
711651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct T3
712651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (T3 vbtable pointer)
713651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   long long a
714651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |   struct T1 (virtual base)
715651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     struct T0 (base) (empty)
716651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   16 |     char a
717651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   24 |   struct T0 (virtual base) (empty)
718651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=24, align=8
719651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=16, nvalign=8]
720651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
721651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
722651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
723651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct T3
724651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (T3 vbtable pointer)
725651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   long long a
726651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct T1 (virtual base)
727651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     struct T0 (base) (empty)
728651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     char a
729651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   24 |   struct T0 (virtual base) (empty)
730651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
731651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
732651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
733651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct Q0A {};
734651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct Q0B { char Q0BField; };
735651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct Q0C : virtual Q0A, virtual Q0B { char Q0CField; };
736651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct Q0D : Q0C, Q0A {};
737651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
738651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
739651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
740651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
741651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
742651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct Q0D
743651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct Q0C (base)
744651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (Q0C vbtable pointer)
745651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     char Q0CField
746651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct Q0A (base) (empty)
747651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct Q0A (virtual base) (empty)
748651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct Q0B (virtual base)
749651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     char Q0BField
750651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=9, align=4
751651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
752651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
753651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
754651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
7557967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout
756651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct Q0D
757651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct Q0C (base)
758651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     (Q0C vbtable pointer)
759651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     char Q0CField
760651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct Q0A (base) (empty)
761651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct Q0A (virtual base) (empty)
762651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct Q0B (virtual base)
763651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     char Q0BField
764651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
765651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
766dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
767dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntint a[
768dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(A)+
769dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(B)+
770dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(C)+
771dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(D)+
772dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(E)+
773dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F)+
774dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(G)+
775dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(H)+
776dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(I)+
777dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(J)+
778dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(K)+
779dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(L)+
780dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(M)+
781dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(N)+
782dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(O)+
783dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(P)+
784dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(Q)+
785dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(R)+
786dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(S)+
787dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(T)+
788dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(U)+
789651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(V)+
790651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(T3)+
791651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(Q0D)];
792