1b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only -Wno-inaccessible-base %s 2>&1 \
2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN:            | FileCheck %s
3b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only -Wno-inaccessible-base %s 2>/dev/null \
4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN:            | FileCheck %s -check-prefix CHECK-X64
5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" int printf(const char *fmt, ...);
7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hineschar buffer[419430400];
8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct A {
10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char a;
11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	A() {
12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("A   = %d\n", (int)((char*)this - buffer));
13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("A.a = %d\n", (int)((char*)&a - buffer));
14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct B {
18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	__declspec(align(4)) long long a;
19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	B() {
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("B   = %d\n", (int)((char*)this - buffer));
21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("B.a = %d\n", (int)((char*)&a - buffer));
22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(push, 2)
26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct X {
27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	B a;
28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char b;
29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	int c;
30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	X() {
31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("X   = %d\n", (int)((char*)this - buffer));
32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("X.a = %d\n", (int)((char*)&a - buffer));
33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("X.b = %d\n", (int)((char*)&b - buffer));
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("X.c = %d\n", (int)((char*)&c - buffer));
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct X
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B a
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     long long a
436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    8 |   char b
44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   10 |   int c
45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=16, align=4
46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=14, nvalign=4]
47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct X
50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B a
51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     long long a
526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    8 |   char b
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   10 |   int c
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=4
55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=14, nvalign=4]
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct Y : A, B {
58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char a;
59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	int b;
60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	Y() {
61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("Y   = %d\n", (int)((char*)this - buffer));
62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("Y.a = %d\n", (int)((char*)&a - buffer));
63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("Y.b = %d\n", (int)((char*)&b - buffer));
64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct Y
70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct A (base)
71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     char a
72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   struct B (base)
73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     long long a
74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   char a
75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   14 |   int b
76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=20, align=4
77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=18, nvalign=4]
78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct Y
81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct A (base)
82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     char a
83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    4 |   struct B (base)
84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    4 |     long long a
85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   12 |   char a
86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   14 |   int b
87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=20, align=4
88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=18, nvalign=4]
89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct Z : virtual B {
91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char a;
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	int b;
93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	Z() {
94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("Z   = %d\n", (int)((char*)this - buffer));
95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("Z.a = %d\n", (int)((char*)&a - buffer));
96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines		printf("Z.b = %d\n", (int)((char*)&b - buffer));
97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	}
98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct Z
102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (Z vbtable pointer)
103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   char a
104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    6 |   int b
105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |   struct B (virtual base)
106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:   12 |     long long a
107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=20, align=4
108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=10, nvalign=4]
109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct Z
111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (Z vbtable pointer)
112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   char a
113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   10 |   int b
114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct B (virtual base)
115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     long long a
116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=4
117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=14, nvalign=4]
118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(pop)
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct A1 { long long a; };
122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(push, 1)
123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct B1 : virtual A1 { char a; };
124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(pop)
125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct C1 : B1 {};
126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct C1
131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct B1 (base)
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     (B1 vbtable pointer)
133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     char a
134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |   struct A1 (virtual base)
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    8 |     long long a
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=16, align=8
137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=5, nvalign=8]
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct C1
142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct B1 (base)
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     (B1 vbtable pointer)
144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     char a
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |   struct A1 (virtual base)
146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   16 |     long long a
147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=24, align=8
148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=9, nvalign=8]
149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct CA0 {
151651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	CA0() {}
152651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
153651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct CA1 : virtual CA0 {
154651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	CA1() {}
155651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
156651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(push, 1)
157651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct CA2 : public CA1, public CA0 {
158651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	virtual void CA2Method() {}
159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	CA2() {}
160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(pop)
162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
164651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct CA2
167651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (CA2 vftable pointer)
168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |   struct CA1 (base)
169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    4 |     (CA1 vbtable pointer)
170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    9 |   struct CA0 (base) (empty)
171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    9 |   struct CA0 (virtual base) (empty)
172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=9, align=1
173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=9, nvalign=1]
174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct CA2
178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (CA2 vftable pointer)
179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |   struct CA1 (base)
180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    8 |     (CA1 vbtable pointer)
181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   17 |   struct CA0 (base) (empty)
182651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:   17 |   struct CA0 (virtual base) (empty)
183651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=17, align=1
184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=17, nvalign=1]
185651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
186651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(16)
187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct YA {
188651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	__declspec(align(32)) char : 1;
189651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
190651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct YA (empty)
19287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT:0:0-0 |   char
193651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=32, align=32
194651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=32, nvalign=32]
195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct YA (empty)
19787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT:0:0-0 |   char
198651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=32, align=32
199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=32, nvalign=32]
200651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
201651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(1)
202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct YB {
203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char a;
204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	YA b;
205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct YB
208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   char a
209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    1 |   struct YA b (empty)
21087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT:1:0-0 |     char
2116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=33, align=1
212651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=33, nvalign=1]
213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct YB
215651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   char a
216651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    1 |   struct YA b (empty)
21787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT:1:0-0 |     char
2186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=33, align=1
219651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=33, nvalign=1]
220651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(8)
222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct YC {
223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	__declspec(align(32)) char : 1;
224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct YC (empty)
22787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT:0:0-0 |   char
228651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=32, align=32
229651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=32, nvalign=32]
230651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
231651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct YC (empty)
23287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT:    0:0-0 |   char
2336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=8, align=32
2346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=32]
235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(1)
237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct YD {
238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char a;
239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	YC b;
240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct YD
243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   char a
244651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    1 |   struct YC b (empty)
24587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT:1:0-0 |     char
2466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=33, align=1
247651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=33, nvalign=1]
248651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
249651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct YD
250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   char a
251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    1 |   struct YC b (empty)
25287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT:1:0-0 |     char
2536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=9, align=1
254651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=9, nvalign=1]
255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
256651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(4)
257651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct YE {
258651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	__declspec(align(32)) char : 1;
259651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
260651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct YE (empty)
26287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT:    0:0-0 |   char
2636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=4, align=32
2646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=4, nvalign=32]
265651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
266651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct YE (empty)
26787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT:    0:0-0 |   char
2686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=4, align=32
2696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=4, nvalign=32]
270651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(1)
272651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct YF {
273651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	char a;
274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines	YE b;
275651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
277651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct YF
278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   char a
279651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    1 |   struct YE b (empty)
28087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT:1:0-0 |     char
2816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=5, align=1
282651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=5, nvalign=1]
283651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
284651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct YF
285651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   char a
286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    1 |   struct YE b (empty)
28787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT:1:0-0 |     char
2886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=5, align=1
289651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=5, nvalign=1]
290651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
291651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(16)
292651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct __declspec(align(16)) D0 { char a; };
293651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(1)
294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct D1 : public D0 { char a; };
295651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(16)
296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct D2 : D1 { char a; };
297651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
298651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
299651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
300651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
301651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct D2
302651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct D1 (base)
303651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     struct D0 (base)
304651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |       char a
305651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    1 |     char a
306651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    2 |   char a
307651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=16, align=16
308651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=16, nvalign=16]
309651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
310651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
311651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
312651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct D2
313651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct D1 (base)
314651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     struct D0 (base)
315651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |       char a
316651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    1 |     char a
317651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    2 |   char a
318651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=16
319651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=16, nvalign=16]
320651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
321651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack()
322651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct JA { char a; };
323651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(1)
324651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct JB { __declspec(align(4)) char a; };
325651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack()
326651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct JC : JB, JA { };
327651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
328651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
329651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
330651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
331651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct JC
332651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct JB (base)
333651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     char a
334651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    1 |   struct JA (base)
335651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    1 |     char a
336651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=4, align=4
337651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=4, nvalign=4]
338651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
339651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
340651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
341651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct JC
342651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct JB (base)
343651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     char a
344651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    1 |   struct JA (base)
345651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    1 |     char a
346651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=4, align=4
347651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=4, nvalign=4]
348651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
349651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack()
350651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct KA { char a; };
351651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(1)
352651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct KB : KA { __declspec(align(2)) char a; };
353651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
354651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
355651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
356651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct KB
357651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   struct KA (base)
358651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |     char a
359651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    2 |   char a
360651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=4, align=2
361651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=3, nvalign=2]
362651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
363651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
364651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct KB
365651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   struct KA (base)
366651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |     char a
367651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    2 |   char a
368651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=4, align=2
369651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=3, nvalign=2]
370651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
371651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(1)
372651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct L {
373651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  virtual void fun() {}
374651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  __declspec(align(256)) int Field;
375651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
376651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
377651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
378651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct L
379651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (L vftable pointer)
380651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  256 |   int Field
381651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=512, align=256
382651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=260, nvalign=256]
383651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
384651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct L
385651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (L vftable pointer)
386651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  256 |   int Field
387651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=512, align=256
388651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=260, nvalign=256]
389651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
390651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack()
391651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct MA {};
392651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#pragma pack(1)
393651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct MB : virtual MA {
394651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  __declspec(align(256)) int Field;
395651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
396651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
397651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
398651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout
399651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 | struct MB
400651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:    0 |   (MB vbtable pointer)
401651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  256 |   int Field
402651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:  260 |   struct MA (virtual base) (empty)
403651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      | [sizeof=512, align=256
404651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT:      |  nvsize=260, nvalign=256]
405651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
406651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout
407651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 | struct MB
408651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:    0 |   (MB vbtable pointer)
409651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  256 |   int Field
410651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:  260 |   struct MA (virtual base) (empty)
411651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      | [sizeof=512, align=256
412651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT:      |  nvsize=260, nvalign=256]
413651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
4146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RA {};
4156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma pack(1)
4166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct __declspec(align(8)) RB0 {
4176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines	__declspec(align(1024)) int b : 3;
4186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines};
4196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
4206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct __declspec(align(8)) RB1 {
4216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines	__declspec(align(1024)) int b : 3;
4226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines	virtual void f() {}
4236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines};
4246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
4256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct __declspec(align(8)) RB2 : virtual RA {
4266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines	__declspec(align(1024)) int b : 3;
4276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines};
4286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
4296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct __declspec(align(8)) RB3 : virtual RA {
4306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines	__declspec(align(1024)) int b : 3;
4316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines	virtual void f() {}
4326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines};
4336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
4346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RC {
4356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines	char _;
4366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines	__declspec(align(1024)) int c : 3;
4376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines};
4386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RE {
4396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines	char _;
4406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines	RC c;
4416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines};
4426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma pack()
4436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
4446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RB0
44687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT:0:0-2 |   int b
4476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=8, align=1024
4486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=4, nvalign=1024]
4496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RB1
4516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   (RB1 vftable pointer)
45287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT: 1024:0-2 |   int b
4536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=1032, align=1024
4546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=1028, nvalign=1024]
4556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RB2
4586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   (RB2 vbtable pointer)
45987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT: 1024:0-2 |   int b
4606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 1028 |   struct RA (virtual base) (empty)
4616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=1032, align=1024
4626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=1028, nvalign=1024]
4636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RB3
4656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   (RB3 vftable pointer)
4666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 1024 |   (RB3 vbtable pointer)
46787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT: 2048:0-2 |   int b
4686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 2052 |   struct RA (virtual base) (empty)
4696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=2056, align=1024
4706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=2052, nvalign=1024]
4716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RC
4736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   char _
47487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT: 1024:0-2 |   int c
4756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=1028, align=1024
4766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=1028, nvalign=1024]
4776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout
4786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 | struct RE
4796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    0 |   char _
4806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    1 |   struct RC c
4816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:    1 |     char _
48287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT: 1025:0-2 |     int c
4836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      | [sizeof=1029, align=1
4846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT:      |  nvsize=1029, nvalign=1]
4856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RB0
48787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT:    0:0-2 |   int b
4886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=8, align=1024
4896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=4, nvalign=1024]
4906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RB1
4926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   (RB1 vftable pointer)
49387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT: 1024:0-2 |   int b
4946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=1032, align=1024
4956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=1028, nvalign=1024]
4966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
4986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RB2
4996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   (RB2 vbtable pointer)
50087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT: 1024:0-2 |   int b
5016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 1028 |   struct RA (virtual base) (empty)
5026bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=1032, align=1024
5036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=1028, nvalign=1024]
5046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RB3
5066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   (RB3 vftable pointer)
5076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 1024 |   (RB3 vbtable pointer)
50887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT: 2048:0-2 |   int b
5096bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 2052 |   struct RA (virtual base) (empty)
5106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=2056, align=1024
5116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=2052, nvalign=1024]
5126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RC
5146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   char _
51587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT: 1024:0-2 |   int c
5166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=1028, align=1024
5176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=1028, nvalign=1024]
5186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout
5196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 | struct RE
5206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    0 |   char _
5216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    1 |   struct RC c
5226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:    1 |     char _
52387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT: 1025:0-2 |     int c
5246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      | [sizeof=1029, align=1
5256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT:      |  nvsize=1029, nvalign=1]
5266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
527176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct NA {};
528176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct NB {};
529176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack(push, 1)
530176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct NC : virtual NA, virtual NB {};
531176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack(pop)
532176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct ND : NC {};
533176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
534176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
535176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct NA (empty)
536176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=1, align=1
537176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=0, nvalign=1]
538176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
539176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct NB (empty)
540176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=1, align=1
541176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=0, nvalign=1]
542176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
543176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct NC
544176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |   (NC vbtable pointer)
545176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    4 |   struct NA (virtual base) (empty)
546176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    8 |   struct NB (virtual base) (empty)
547176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=8, align=1
548176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=4, nvalign=1]
549176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
550176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct ND
551176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |   struct NC (base)
552176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |     (NC vbtable pointer)
553176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    4 |   struct NA (virtual base) (empty)
554176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    8 |   struct NB (virtual base) (empty)
555176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=8, align=4
556176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=4, nvalign=4]
557176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
558176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct NA (empty)
559176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=1, align=1
560176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=0, nvalign=1]
561176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
562176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct NB (empty)
563176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=1, align=1
564176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=0, nvalign=1]
565176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
566176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct NC
567176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |   (NC vbtable pointer)
568176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    8 |   struct NA (virtual base) (empty)
569176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:   12 |   struct NB (virtual base) (empty)
570176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=12, align=1
571176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=1]
572176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
573176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct ND
574176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |   struct NC (base)
575176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |     (NC vbtable pointer)
576176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    8 |   struct NA (virtual base) (empty)
577176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:   12 |   struct NB (virtual base) (empty)
578176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=12, align=4
579176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=4]
580176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
581176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct OA {};
582176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct OB {};
583176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct OC : virtual OA, virtual OB {};
584176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack(push, 1)
585176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct OD : OC {};
586176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack(pop)
587176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
588176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
589176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct OA (empty)
590176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=1, align=1
591176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=0, nvalign=1]
592176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
593176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct OB (empty)
594176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=1, align=1
595176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=0, nvalign=1]
596176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
597176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct OC
598176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |   (OC vbtable pointer)
599176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    4 |   struct OA (virtual base) (empty)
600176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    8 |   struct OB (virtual base) (empty)
601176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=8, align=4
602176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=4, nvalign=4]
603176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
604176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct OD
605176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |   struct OC (base)
606176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |     (OC vbtable pointer)
607176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    4 |   struct OA (virtual base) (empty)
608176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    8 |   struct OB (virtual base) (empty)
609176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=8, align=1
610176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=4, nvalign=1]
611176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
612176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct OA (empty)
613176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=1, align=1
614176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=0, nvalign=1]
615176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
616176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct OB (empty)
617176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=1, align=1
618176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=0, nvalign=1]
619176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
620176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct OC
621176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |   (OC vbtable pointer)
622176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    8 |   struct OA (virtual base) (empty)
623176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:   12 |   struct OB (virtual base) (empty)
624176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=8
625176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=8]
626176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
627176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct OD
628176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |   struct OC (base)
629176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |     (OC vbtable pointer)
630176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    8 |   struct OA (virtual base) (empty)
631176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:   12 |   struct OB (virtual base) (empty)
632176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=12, align=1
633176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=1]
634176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
635176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct __declspec(align(4)) PA {
636176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  int c;
637176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
638176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
639176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestypedef __declspec(align(8)) PA PB;
640176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
641176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack(push, 1)
642176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct PC {
643176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  char a;
644176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  PB x;
645176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
646176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack(pop)
647176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
648176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
649176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK:         0 | struct PC
650176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |   char a
651176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    8 |   struct PA x
652176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    8 |     int c
653176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=16, align=8
654176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=12, nvalign=8]
655176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
656176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64:         0 | struct PC
657176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |   char a
658176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    8 |   struct PA x
659176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    8 |     int c
660176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=8
661176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=12, nvalign=8]
662176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
663176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestypedef PB PD;
664176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
665176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack(push, 1)
666176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct PE {
667176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  char a;
668176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  PD x;
669176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
670176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack(pop)
671176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
672176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
673176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK:         0 | struct PE
674176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |   char a
675176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    8 |   struct PA x
676176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    8 |     int c
677176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=16, align=8
678176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=12, nvalign=8]
679176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
680176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64:         0 | struct PE
681176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |   char a
682176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    8 |   struct PA x
683176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    8 |     int c
684176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=16, align=8
685176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=12, nvalign=8]
686176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
687176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestypedef int __declspec(align(2)) QA;
688176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack(push, 1)
689176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct QB {
690176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  char a;
691176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  QA b;
692176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
693176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack(pop)
694176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
695176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
696176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct QB
697176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |   char a
698176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    2 |   QA b
699176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=6, align=2
700176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=6, nvalign=2]
701176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
702176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct QB
703176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |   char a
704176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    2 |   QA b
705176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=6, align=2
706176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=6, nvalign=2]
707176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
708176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct QC {
709176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  char a;
710176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  QA b;
711176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
712176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
713176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
714176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct QC
715176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |   char a
716176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    4 |   QA b
717176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=8, align=4
718176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
719176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
720176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct QC
721176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |   char a
722176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    4 |   QA b
723176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=8, align=4
724176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=4]
725176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
726176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct QD {
727176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  char a;
728176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  QA b : 3;
729176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
730176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
731176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
732176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct QD
733176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |   char a
73487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-NEXT:4:0-2 |   QA b
735176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=8, align=4
736176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=8, nvalign=4]
737176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
738176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct QD
739176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |   char a
74087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-X64-NEXT:4:0-2 |   QA b
741176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=8, align=4
742176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=8, nvalign=4]
743176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
744176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct __declspec(align(4)) EmptyAlignedLongLongMemb {
745176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  long long FlexArrayMemb[0];
746176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
747176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
748176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
749176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct EmptyAlignedLongLongMemb
750176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |   long long [0] FlexArrayMemb
751176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=8, align=8
752176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=0, nvalign=8]
753176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
754176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct EmptyAlignedLongLongMemb
755176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |   long long [0] FlexArrayMemb
756176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=8, align=8
757176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=0, nvalign=8]
758176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
759176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack(1)
760176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct __declspec(align(4)) EmptyPackedAlignedLongLongMemb {
761176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  long long FlexArrayMemb[0];
762176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
763176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma pack()
764176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
765176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: *** Dumping AST Record Layout
766176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 | struct EmptyPackedAlignedLongLongMemb
767176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:    0 |   long long [0] FlexArrayMemb
768176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      | [sizeof=4, align=4
769176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NEXT:      |  nvsize=0, nvalign=4]
770176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64: *** Dumping AST Record Layout
771176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 | struct EmptyPackedAlignedLongLongMemb
772176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:    0 |   long long [0] FlexArrayMemb
773176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      | [sizeof=4, align=4
774176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-X64-NEXT:      |  nvsize=0, nvalign=4]
775176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
776651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint a[
777651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(X)+
778651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(Y)+
779651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(Z)+
780651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(C1)+
781651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(CA2)+
782651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(YA)+
783651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(YB)+
784651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(YC)+
785651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(YD)+
786651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(YE)+
787651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(YF)+
788651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(YF)+
789651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(D2)+
790651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(JC)+
791651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(KB)+
792651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(L)+
793651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(MB)+
7946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RB0)+
7956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RB1)+
7966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RB2)+
7976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RB3)+
7986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RC)+
7996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RE)+
800176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinessizeof(ND)+
801176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinessizeof(OD)+
802176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinessizeof(PC)+
803176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinessizeof(PE)+
804176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinessizeof(QB)+
805176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinessizeof(QC)+
806176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinessizeof(QD)+
807176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinessizeof(EmptyAlignedLongLongMemb)+
808176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinessizeof(EmptyPackedAlignedLongLongMemb)+
809651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines0];
810