| // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ | 
 | // RUN:            | FileCheck %s | 
 | // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ | 
 | // RUN:            | FileCheck %s -check-prefix CHECK-X64 | 
 |  | 
 | extern "C" int printf(const char *fmt, ...); | 
 |  | 
 | struct A4 { | 
 | 	int a; | 
 | 	A4() : a(0xf00000a4) {} | 
 | }; | 
 |  | 
 | struct B4 { | 
 | 	int a; | 
 | 	B4() : a(0xf00000b4) {} | 
 | }; | 
 |  | 
 | struct C4 { | 
 | 	int a; | 
 | 	C4() : a(0xf00000c4) {} | 
 | 	virtual void f() {printf("C4");} | 
 | }; | 
 |  | 
 | struct A16 { | 
 | 	__declspec(align(16)) int a; | 
 | 	A16() : a(0xf0000a16) {} | 
 | }; | 
 |  | 
 | struct C16 { | 
 | 	__declspec(align(16)) int a; | 
 | 	C16() : a(0xf0000c16) {} | 
 | 	virtual void f() {printf("C16");} | 
 | }; | 
 |  | 
 | struct TestF0 : A4, virtual B4 { | 
 | 	int a; | 
 | 	TestF0() : a(0xf00000F0) {} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestF0 | 
 | // CHECK-NEXT:    0 |   struct A4 (base) | 
 | // CHECK-NEXT:    0 |     int a | 
 | // CHECK-NEXT:    4 |   (TestF0 vbtable pointer) | 
 | // CHECK-NEXT:    8 |   int a | 
 | // CHECK-NEXT:   12 |   struct B4 (virtual base) | 
 | // CHECK-NEXT:   12 |     int a | 
 | // CHECK-NEXT:      | [sizeof=16, align=4 | 
 | // CHECK-NEXT:      |  nvsize=12, nvalign=4] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestF0 | 
 | // CHECK-X64-NEXT:    0 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:    0 |     int a | 
 | // CHECK-X64-NEXT:    8 |   (TestF0 vbtable pointer) | 
 | // CHECK-X64-NEXT:   16 |   int a | 
 | // CHECK-X64-NEXT:   24 |   struct B4 (virtual base) | 
 | // CHECK-X64-NEXT:   24 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=32, align=8 | 
 | // CHECK-X64-NEXT:      |  nvsize=24, nvalign=8] | 
 |  | 
 | struct TestF1 : A4, virtual A16 { | 
 | 	int a; | 
 | 	TestF1() : a(0xf00000f1) {} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestF1 | 
 | // CHECK-NEXT:    0 |   struct A4 (base) | 
 | // CHECK-NEXT:    0 |     int a | 
 | // CHECK-NEXT:    4 |   (TestF1 vbtable pointer) | 
 | // CHECK-NEXT:    8 |   int a | 
 | // CHECK-NEXT:   16 |   struct A16 (virtual base) | 
 | // CHECK-NEXT:   16 |     int a | 
 | // CHECK-NEXT:      | [sizeof=32, align=16 | 
 | // CHECK-NEXT:      |  nvsize=12, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestF1 | 
 | // CHECK-X64-NEXT:    0 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:    0 |     int a | 
 | // CHECK-X64-NEXT:    8 |   (TestF1 vbtable pointer) | 
 | // CHECK-X64-NEXT:   16 |   int a | 
 | // CHECK-X64-NEXT:   32 |   struct A16 (virtual base) | 
 | // CHECK-X64-NEXT:   32 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=48, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=24, nvalign=16] | 
 |  | 
 | struct TestF2 : A4, virtual C4 { | 
 | 	int a; | 
 | 	TestF2() : a(0xf00000f2) {} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestF2 | 
 | // CHECK-NEXT:    0 |   struct A4 (base) | 
 | // CHECK-NEXT:    0 |     int a | 
 | // CHECK-NEXT:    4 |   (TestF2 vbtable pointer) | 
 | // CHECK-NEXT:    8 |   int a | 
 | // CHECK-NEXT:   12 |   struct C4 (virtual base) | 
 | // CHECK-NEXT:   12 |     (C4 vftable pointer) | 
 | // CHECK-NEXT:   16 |     int a | 
 | // CHECK-NEXT:      | [sizeof=20, align=4 | 
 | // CHECK-NEXT:      |  nvsize=12, nvalign=4] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestF2 | 
 | // CHECK-X64-NEXT:    0 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:    0 |     int a | 
 | // CHECK-X64-NEXT:    8 |   (TestF2 vbtable pointer) | 
 | // CHECK-X64-NEXT:   16 |   int a | 
 | // CHECK-X64-NEXT:   24 |   struct C4 (virtual base) | 
 | // CHECK-X64-NEXT:   24 |     (C4 vftable pointer) | 
 | // CHECK-X64-NEXT:   32 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=40, align=8 | 
 | // CHECK-X64-NEXT:      |  nvsize=24, nvalign=8] | 
 |  | 
 | struct TestF3 : A4, virtual C16 { | 
 | 	int a; | 
 | 	TestF3() : a(0xf00000f3) {} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestF3 | 
 | // CHECK-NEXT:    0 |   struct A4 (base) | 
 | // CHECK-NEXT:    0 |     int a | 
 | // CHECK-NEXT:    4 |   (TestF3 vbtable pointer) | 
 | // CHECK-NEXT:    8 |   int a | 
 | // CHECK-NEXT:   16 |   struct C16 (virtual base) | 
 | // CHECK-NEXT:   16 |     (C16 vftable pointer) | 
 | // CHECK-NEXT:   32 |     int a | 
 | // CHECK-NEXT:      | [sizeof=48, align=16 | 
 | // CHECK-NEXT:      |  nvsize=12, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestF3 | 
 | // CHECK-X64-NEXT:    0 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:    0 |     int a | 
 | // CHECK-X64-NEXT:    8 |   (TestF3 vbtable pointer) | 
 | // CHECK-X64-NEXT:   16 |   int a | 
 | // CHECK-X64-NEXT:   32 |   struct C16 (virtual base) | 
 | // CHECK-X64-NEXT:   32 |     (C16 vftable pointer) | 
 | // CHECK-X64-NEXT:   48 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=64, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=24, nvalign=16] | 
 |  | 
 | struct TestF4 : TestF3, A4 { | 
 | 	int a; | 
 | 	TestF4() : a(0xf00000f4) {} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestF4 | 
 | // CHECK-NEXT:    0 |   struct TestF3 (base) | 
 | // CHECK-NEXT:    0 |     struct A4 (base) | 
 | // CHECK-NEXT:    0 |       int a | 
 | // CHECK-NEXT:    4 |     (TestF3 vbtable pointer) | 
 | // CHECK-NEXT:    8 |     int a | 
 | // CHECK-NEXT:   12 |   struct A4 (base) | 
 | // CHECK-NEXT:   12 |     int a | 
 | // CHECK-NEXT:   16 |   int a | 
 | // CHECK-NEXT:   32 |   struct C16 (virtual base) | 
 | // CHECK-NEXT:   32 |     (C16 vftable pointer) | 
 | // CHECK-NEXT:   48 |     int a | 
 | // CHECK-NEXT:      | [sizeof=64, align=16 | 
 | // CHECK-NEXT:      |  nvsize=32, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestF4 | 
 | // CHECK-X64-NEXT:    0 |   struct TestF3 (base) | 
 | // CHECK-X64-NEXT:    0 |     struct A4 (base) | 
 | // CHECK-X64-NEXT:    0 |       int a | 
 | // CHECK-X64-NEXT:    8 |     (TestF3 vbtable pointer) | 
 | // CHECK-X64-NEXT:   16 |     int a | 
 | // CHECK-X64-NEXT:   24 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:   24 |     int a | 
 | // CHECK-X64-NEXT:   28 |   int a | 
 | // CHECK-X64-NEXT:   32 |   struct C16 (virtual base) | 
 | // CHECK-X64-NEXT:   32 |     (C16 vftable pointer) | 
 | // CHECK-X64-NEXT:   48 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=64, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=32, nvalign=16] | 
 |  | 
 | struct TestF5 : TestF3, A4 { | 
 | 	int a; | 
 | 	TestF5() : a(0xf00000f5) {} | 
 | 	virtual void g() {printf("F5");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestF5 | 
 | // CHECK-NEXT:    0 |   (TestF5 vftable pointer) | 
 | // CHECK-NEXT:   16 |   struct TestF3 (base) | 
 | // CHECK-NEXT:   16 |     struct A4 (base) | 
 | // CHECK-NEXT:   16 |       int a | 
 | // CHECK-NEXT:   20 |     (TestF3 vbtable pointer) | 
 | // CHECK-NEXT:   24 |     int a | 
 | // CHECK-NEXT:   28 |   struct A4 (base) | 
 | // CHECK-NEXT:   28 |     int a | 
 | // CHECK-NEXT:   32 |   int a | 
 | // CHECK-NEXT:   48 |   struct C16 (virtual base) | 
 | // CHECK-NEXT:   48 |     (C16 vftable pointer) | 
 | // CHECK-NEXT:   64 |     int a | 
 | // CHECK-NEXT:      | [sizeof=80, align=16 | 
 | // CHECK-NEXT:      |  nvsize=48, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestF5 | 
 | // CHECK-X64-NEXT:    0 |   (TestF5 vftable pointer) | 
 | // CHECK-X64-NEXT:   16 |   struct TestF3 (base) | 
 | // CHECK-X64-NEXT:   16 |     struct A4 (base) | 
 | // CHECK-X64-NEXT:   16 |       int a | 
 | // CHECK-X64-NEXT:   24 |     (TestF3 vbtable pointer) | 
 | // CHECK-X64-NEXT:   32 |     int a | 
 | // CHECK-X64-NEXT:   40 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:   40 |     int a | 
 | // CHECK-X64-NEXT:   44 |   int a | 
 | // CHECK-X64-NEXT:   48 |   struct C16 (virtual base) | 
 | // CHECK-X64-NEXT:   48 |     (C16 vftable pointer) | 
 | // CHECK-X64-NEXT:   64 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=80, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=48, nvalign=16] | 
 |  | 
 | struct TestF6 : TestF3, A4 { | 
 | 	int a; | 
 | 	TestF6() : a(0xf00000f6) {} | 
 | 	virtual void f() {printf("F6");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestF6 | 
 | // CHECK-NEXT:    0 |   struct TestF3 (base) | 
 | // CHECK-NEXT:    0 |     struct A4 (base) | 
 | // CHECK-NEXT:    0 |       int a | 
 | // CHECK-NEXT:    4 |     (TestF3 vbtable pointer) | 
 | // CHECK-NEXT:    8 |     int a | 
 | // CHECK-NEXT:   12 |   struct A4 (base) | 
 | // CHECK-NEXT:   12 |     int a | 
 | // CHECK-NEXT:   16 |   int a | 
 | // CHECK-NEXT:   44 |   (vtordisp for vbase C16) | 
 | // CHECK-NEXT:   48 |   struct C16 (virtual base) | 
 | // CHECK-NEXT:   48 |     (C16 vftable pointer) | 
 | // CHECK-NEXT:   64 |     int a | 
 | // CHECK-NEXT:      | [sizeof=80, align=16 | 
 | // CHECK-NEXT:      |  nvsize=32, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestF6 | 
 | // CHECK-X64-NEXT:    0 |   struct TestF3 (base) | 
 | // CHECK-X64-NEXT:    0 |     struct A4 (base) | 
 | // CHECK-X64-NEXT:    0 |       int a | 
 | // CHECK-X64-NEXT:    8 |     (TestF3 vbtable pointer) | 
 | // CHECK-X64-NEXT:   16 |     int a | 
 | // CHECK-X64-NEXT:   24 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:   24 |     int a | 
 | // CHECK-X64-NEXT:   28 |   int a | 
 | // CHECK-X64-NEXT:   44 |   (vtordisp for vbase C16) | 
 | // CHECK-X64-NEXT:   48 |   struct C16 (virtual base) | 
 | // CHECK-X64-NEXT:   48 |     (C16 vftable pointer) | 
 | // CHECK-X64-NEXT:   64 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=80, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=32, nvalign=16] | 
 |  | 
 | struct TestF7 : A4, virtual C16 { | 
 | 	int a; | 
 | 	TestF7() : a(0xf00000f7) {} | 
 | 	virtual void f() {printf("F7");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestF7 | 
 | // CHECK-NEXT:    0 |   struct A4 (base) | 
 | // CHECK-NEXT:    0 |     int a | 
 | // CHECK-NEXT:    4 |   (TestF7 vbtable pointer) | 
 | // CHECK-NEXT:    8 |   int a | 
 | // CHECK-NEXT:   28 |   (vtordisp for vbase C16) | 
 | // CHECK-NEXT:   32 |   struct C16 (virtual base) | 
 | // CHECK-NEXT:   32 |     (C16 vftable pointer) | 
 | // CHECK-NEXT:   48 |     int a | 
 | // CHECK-NEXT:      | [sizeof=64, align=16 | 
 | // CHECK-NEXT:      |  nvsize=12, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestF7 | 
 | // CHECK-X64-NEXT:    0 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:    0 |     int a | 
 | // CHECK-X64-NEXT:    8 |   (TestF7 vbtable pointer) | 
 | // CHECK-X64-NEXT:   16 |   int a | 
 | // CHECK-X64-NEXT:   44 |   (vtordisp for vbase C16) | 
 | // CHECK-X64-NEXT:   48 |   struct C16 (virtual base) | 
 | // CHECK-X64-NEXT:   48 |     (C16 vftable pointer) | 
 | // CHECK-X64-NEXT:   64 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=80, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=24, nvalign=16] | 
 |  | 
 | struct TestF8 : TestF7, A4 { | 
 | 	int a; | 
 | 	TestF8() : a(0xf00000f8) {} | 
 | 	virtual void f() {printf("F8");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestF8 | 
 | // CHECK-NEXT:    0 |   struct TestF7 (base) | 
 | // CHECK-NEXT:    0 |     struct A4 (base) | 
 | // CHECK-NEXT:    0 |       int a | 
 | // CHECK-NEXT:    4 |     (TestF7 vbtable pointer) | 
 | // CHECK-NEXT:    8 |     int a | 
 | // CHECK-NEXT:   12 |   struct A4 (base) | 
 | // CHECK-NEXT:   12 |     int a | 
 | // CHECK-NEXT:   16 |   int a | 
 | // CHECK-NEXT:   44 |   (vtordisp for vbase C16) | 
 | // CHECK-NEXT:   48 |   struct C16 (virtual base) | 
 | // CHECK-NEXT:   48 |     (C16 vftable pointer) | 
 | // CHECK-NEXT:   64 |     int a | 
 | // CHECK-NEXT:      | [sizeof=80, align=16 | 
 | // CHECK-NEXT:      |  nvsize=32, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestF8 | 
 | // CHECK-X64-NEXT:    0 |   struct TestF7 (base) | 
 | // CHECK-X64-NEXT:    0 |     struct A4 (base) | 
 | // CHECK-X64-NEXT:    0 |       int a | 
 | // CHECK-X64-NEXT:    8 |     (TestF7 vbtable pointer) | 
 | // CHECK-X64-NEXT:   16 |     int a | 
 | // CHECK-X64-NEXT:   24 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:   24 |     int a | 
 | // CHECK-X64-NEXT:   28 |   int a | 
 | // CHECK-X64-NEXT:   44 |   (vtordisp for vbase C16) | 
 | // CHECK-X64-NEXT:   48 |   struct C16 (virtual base) | 
 | // CHECK-X64-NEXT:   48 |     (C16 vftable pointer) | 
 | // CHECK-X64-NEXT:   64 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=80, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=32, nvalign=16] | 
 |  | 
 | struct TestF9 : A4, virtual C16 { | 
 | 	int a; | 
 | 	TestF9() : a(0xf00000f9) {} | 
 | 	virtual void g() {printf("F9");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestF9 | 
 | // CHECK-NEXT:    0 |   (TestF9 vftable pointer) | 
 | // CHECK-NEXT:    4 |   struct A4 (base) | 
 | // CHECK-NEXT:    4 |     int a | 
 | // CHECK-NEXT:    8 |   (TestF9 vbtable pointer) | 
 | // CHECK-NEXT:   12 |   int a | 
 | // CHECK-NEXT:   16 |   struct C16 (virtual base) | 
 | // CHECK-NEXT:   16 |     (C16 vftable pointer) | 
 | // CHECK-NEXT:   32 |     int a | 
 | // CHECK-NEXT:      | [sizeof=48, align=16 | 
 | // CHECK-NEXT:      |  nvsize=16, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestF9 | 
 | // CHECK-X64-NEXT:    0 |   (TestF9 vftable pointer) | 
 | // CHECK-X64-NEXT:    8 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:    8 |     int a | 
 | // CHECK-X64-NEXT:   16 |   (TestF9 vbtable pointer) | 
 | // CHECK-X64-NEXT:   24 |   int a | 
 | // CHECK-X64-NEXT:   32 |   struct C16 (virtual base) | 
 | // CHECK-X64-NEXT:   32 |     (C16 vftable pointer) | 
 | // CHECK-X64-NEXT:   48 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=64, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=32, nvalign=16] | 
 |  | 
 | struct TestFA : TestF9, A4 { | 
 | 	int a; | 
 | 	TestFA() : a(0xf00000fa) {} | 
 | 	virtual void g() {printf("FA");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestFA | 
 | // CHECK-NEXT:    0 |   struct TestF9 (primary base) | 
 | // CHECK-NEXT:    0 |     (TestF9 vftable pointer) | 
 | // CHECK-NEXT:    4 |     struct A4 (base) | 
 | // CHECK-NEXT:    4 |       int a | 
 | // CHECK-NEXT:    8 |     (TestF9 vbtable pointer) | 
 | // CHECK-NEXT:   12 |     int a | 
 | // CHECK-NEXT:   16 |   struct A4 (base) | 
 | // CHECK-NEXT:   16 |     int a | 
 | // CHECK-NEXT:   20 |   int a | 
 | // CHECK-NEXT:   32 |   struct C16 (virtual base) | 
 | // CHECK-NEXT:   32 |     (C16 vftable pointer) | 
 | // CHECK-NEXT:   48 |     int a | 
 | // CHECK-NEXT:      | [sizeof=64, align=16 | 
 | // CHECK-NEXT:      |  nvsize=32, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestFA | 
 | // CHECK-X64-NEXT:    0 |   struct TestF9 (primary base) | 
 | // CHECK-X64-NEXT:    0 |     (TestF9 vftable pointer) | 
 | // CHECK-X64-NEXT:    8 |     struct A4 (base) | 
 | // CHECK-X64-NEXT:    8 |       int a | 
 | // CHECK-X64-NEXT:   16 |     (TestF9 vbtable pointer) | 
 | // CHECK-X64-NEXT:   24 |     int a | 
 | // CHECK-X64-NEXT:   32 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:   32 |     int a | 
 | // CHECK-X64-NEXT:   36 |   int a | 
 | // CHECK-X64-NEXT:   48 |   struct C16 (virtual base) | 
 | // CHECK-X64-NEXT:   48 |     (C16 vftable pointer) | 
 | // CHECK-X64-NEXT:   64 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=80, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=48, nvalign=16] | 
 |  | 
 | struct TestFB : A16, virtual C16 { | 
 | 	int a; | 
 | 	TestFB() : a(0xf00000fb) {} | 
 | 	virtual void g() {printf("Fb");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestFB | 
 | // CHECK-NEXT:    0 |   (TestFB vftable pointer) | 
 | // CHECK-NEXT:   16 |   struct A16 (base) | 
 | // CHECK-NEXT:   16 |     int a | 
 | // CHECK-NEXT:   32 |   (TestFB vbtable pointer) | 
 | // CHECK-NEXT:   48 |   int a | 
 | // CHECK-NEXT:   64 |   struct C16 (virtual base) | 
 | // CHECK-NEXT:   64 |     (C16 vftable pointer) | 
 | // CHECK-NEXT:   80 |     int a | 
 | // CHECK-NEXT:      | [sizeof=96, align=16 | 
 | // CHECK-NEXT:      |  nvsize=64, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestFB | 
 | // CHECK-X64-NEXT:    0 |   (TestFB vftable pointer) | 
 | // CHECK-X64-NEXT:   16 |   struct A16 (base) | 
 | // CHECK-X64-NEXT:   16 |     int a | 
 | // CHECK-X64-NEXT:   32 |   (TestFB vbtable pointer) | 
 | // CHECK-X64-NEXT:   48 |   int a | 
 | // CHECK-X64-NEXT:   64 |   struct C16 (virtual base) | 
 | // CHECK-X64-NEXT:   64 |     (C16 vftable pointer) | 
 | // CHECK-X64-NEXT:   80 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=96, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=64, nvalign=16] | 
 |  | 
 | struct TestFC : TestFB, A4 { | 
 | 	int a; | 
 | 	TestFC() : a(0xf00000fc) {} | 
 | 	virtual void g() {printf("FC");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct TestFC | 
 | // CHECK-NEXT:    0 |   struct TestFB (primary base) | 
 | // CHECK-NEXT:    0 |     (TestFB vftable pointer) | 
 | // CHECK-NEXT:   16 |     struct A16 (base) | 
 | // CHECK-NEXT:   16 |       int a | 
 | // CHECK-NEXT:   32 |     (TestFB vbtable pointer) | 
 | // CHECK-NEXT:   48 |     int a | 
 | // CHECK-NEXT:   64 |   struct A4 (base) | 
 | // CHECK-NEXT:   64 |     int a | 
 | // CHECK-NEXT:   68 |   int a | 
 | // CHECK-NEXT:   80 |   struct C16 (virtual base) | 
 | // CHECK-NEXT:   80 |     (C16 vftable pointer) | 
 | // CHECK-NEXT:   96 |     int a | 
 | // CHECK-NEXT:      | [sizeof=112, align=16 | 
 | // CHECK-NEXT:      |  nvsize=80, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct TestFC | 
 | // CHECK-X64-NEXT:    0 |   struct TestFB (primary base) | 
 | // CHECK-X64-NEXT:    0 |     (TestFB vftable pointer) | 
 | // CHECK-X64-NEXT:   16 |     struct A16 (base) | 
 | // CHECK-X64-NEXT:   16 |       int a | 
 | // CHECK-X64-NEXT:   32 |     (TestFB vbtable pointer) | 
 | // CHECK-X64-NEXT:   48 |     int a | 
 | // CHECK-X64-NEXT:   64 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:   64 |     int a | 
 | // CHECK-X64-NEXT:   68 |   int a | 
 | // CHECK-X64-NEXT:   80 |   struct C16 (virtual base) | 
 | // CHECK-X64-NEXT:   80 |     (C16 vftable pointer) | 
 | // CHECK-X64-NEXT:   96 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=112, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=80, nvalign=16] | 
 |  | 
 |  | 
 | struct A16f { | 
 | 	__declspec(align(16)) int a; | 
 | 	A16f() : a(0xf0000a16) {} | 
 | 	virtual void f() {printf("A16f");} | 
 | }; | 
 |  | 
 | struct Y { char y; Y() : y(0xaa) {} }; | 
 | struct X : virtual A16f {}; | 
 |  | 
 | struct B : A4, Y, X { | 
 | 	int a; | 
 | 	B() : a(0xf000000b) {} | 
 | }; | 
 |  | 
 | struct F0 : A4, B { | 
 | 	int a; | 
 | 	F0() : a(0xf00000f0) {} | 
 | 	virtual void g() {printf("F0");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct F0 | 
 | // CHECK-NEXT:    0 |   (F0 vftable pointer) | 
 | // CHECK-NEXT:   16 |   struct A4 (base) | 
 | // CHECK-NEXT:   16 |     int a | 
 | // CHECK-NEXT:   32 |   struct B (base) | 
 | // CHECK-NEXT:   32 |     struct A4 (base) | 
 | // CHECK-NEXT:   32 |       int a | 
 | // CHECK-NEXT:   36 |     struct Y (base) | 
 | // CHECK-NEXT:   36 |       char y | 
 | // CHECK-NEXT:   48 |     struct X (base) | 
 | // CHECK-NEXT:   48 |       (X vbtable pointer) | 
 | // CHECK-NEXT:   52 |     int a | 
 | // CHECK-NEXT:   64 |   int a | 
 | // CHECK-NEXT:   80 |   struct A16f (virtual base) | 
 | // CHECK-NEXT:   80 |     (A16f vftable pointer) | 
 | // CHECK-NEXT:   96 |     int a | 
 | // CHECK-NEXT:      | [sizeof=112, align=16 | 
 | // CHECK-NEXT:      |  nvsize=80, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct F0 | 
 | // CHECK-X64-NEXT:    0 |   (F0 vftable pointer) | 
 | // CHECK-X64-NEXT:   16 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:   16 |     int a | 
 | // CHECK-X64-NEXT:   32 |   struct B (base) | 
 | // CHECK-X64-NEXT:   32 |     struct A4 (base) | 
 | // CHECK-X64-NEXT:   32 |       int a | 
 | // CHECK-X64-NEXT:   36 |     struct Y (base) | 
 | // CHECK-X64-NEXT:   36 |       char y | 
 | // CHECK-X64-NEXT:   48 |     struct X (base) | 
 | // CHECK-X64-NEXT:   48 |       (X vbtable pointer) | 
 | // CHECK-X64-NEXT:   56 |     int a | 
 | // CHECK-X64-NEXT:   64 |   int a | 
 | // CHECK-X64-NEXT:   80 |   struct A16f (virtual base) | 
 | // CHECK-X64-NEXT:   80 |     (A16f vftable pointer) | 
 | // CHECK-X64-NEXT:   96 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=112, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=80, nvalign=16] | 
 |  | 
 | struct F1 : B, A4 { | 
 | 	int a; | 
 | 	F1() : a(0xf00000f1) {} | 
 | 	virtual void g() {printf("F1");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct F1 | 
 | // CHECK-NEXT:    0 |   (F1 vftable pointer) | 
 | // CHECK-NEXT:   16 |   struct B (base) | 
 | // CHECK-NEXT:   16 |     struct A4 (base) | 
 | // CHECK-NEXT:   16 |       int a | 
 | // CHECK-NEXT:   20 |     struct Y (base) | 
 | // CHECK-NEXT:   20 |       char y | 
 | // CHECK-NEXT:   32 |     struct X (base) | 
 | // CHECK-NEXT:   32 |       (X vbtable pointer) | 
 | // CHECK-NEXT:   36 |     int a | 
 | // CHECK-NEXT:   48 |   struct A4 (base) | 
 | // CHECK-NEXT:   48 |     int a | 
 | // CHECK-NEXT:   52 |   int a | 
 | // CHECK-NEXT:   64 |   struct A16f (virtual base) | 
 | // CHECK-NEXT:   64 |     (A16f vftable pointer) | 
 | // CHECK-NEXT:   80 |     int a | 
 | // CHECK-NEXT:      | [sizeof=96, align=16 | 
 | // CHECK-NEXT:      |  nvsize=64, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct F1 | 
 | // CHECK-X64-NEXT:    0 |   (F1 vftable pointer) | 
 | // CHECK-X64-NEXT:   16 |   struct B (base) | 
 | // CHECK-X64-NEXT:   16 |     struct A4 (base) | 
 | // CHECK-X64-NEXT:   16 |       int a | 
 | // CHECK-X64-NEXT:   20 |     struct Y (base) | 
 | // CHECK-X64-NEXT:   20 |       char y | 
 | // CHECK-X64-NEXT:   32 |     struct X (base) | 
 | // CHECK-X64-NEXT:   32 |       (X vbtable pointer) | 
 | // CHECK-X64-NEXT:   40 |     int a | 
 | // CHECK-X64-NEXT:   48 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:   48 |     int a | 
 | // CHECK-X64-NEXT:   52 |   int a | 
 | // CHECK-X64-NEXT:   64 |   struct A16f (virtual base) | 
 | // CHECK-X64-NEXT:   64 |     (A16f vftable pointer) | 
 | // CHECK-X64-NEXT:   80 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=96, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=64, nvalign=16] | 
 |  | 
 | struct F2 : A4, virtual A16f { | 
 | 	int a; | 
 | 	F2() : a(0xf00000f2) {} | 
 | 	virtual void g() {printf("F2");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct F2 | 
 | // CHECK-NEXT:    0 |   (F2 vftable pointer) | 
 | // CHECK-NEXT:    4 |   struct A4 (base) | 
 | // CHECK-NEXT:    4 |     int a | 
 | // CHECK-NEXT:    8 |   (F2 vbtable pointer) | 
 | // CHECK-NEXT:   12 |   int a | 
 | // CHECK-NEXT:   16 |   struct A16f (virtual base) | 
 | // CHECK-NEXT:   16 |     (A16f vftable pointer) | 
 | // CHECK-NEXT:   32 |     int a | 
 | // CHECK-NEXT:      | [sizeof=48, align=16 | 
 | // CHECK-NEXT:      |  nvsize=16, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct F2 | 
 | // CHECK-X64-NEXT:    0 |   (F2 vftable pointer) | 
 | // CHECK-X64-NEXT:    8 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:    8 |     int a | 
 | // CHECK-X64-NEXT:   16 |   (F2 vbtable pointer) | 
 | // CHECK-X64-NEXT:   24 |   int a | 
 | // CHECK-X64-NEXT:   32 |   struct A16f (virtual base) | 
 | // CHECK-X64-NEXT:   32 |     (A16f vftable pointer) | 
 | // CHECK-X64-NEXT:   48 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=64, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=32, nvalign=16] | 
 |  | 
 | struct F3 : A4, virtual A16f { | 
 | 	__declspec(align(16)) int a; | 
 | 	F3() : a(0xf00000f3) {} | 
 | 	virtual void g() {printf("F3");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct F3 | 
 | // CHECK-NEXT:    0 |   (F3 vftable pointer) | 
 | // CHECK-NEXT:   16 |   struct A4 (base) | 
 | // CHECK-NEXT:   16 |     int a | 
 | // CHECK-NEXT:   20 |   (F3 vbtable pointer) | 
 | // CHECK-NEXT:   48 |   int a | 
 | // CHECK-NEXT:   64 |   struct A16f (virtual base) | 
 | // CHECK-NEXT:   64 |     (A16f vftable pointer) | 
 | // CHECK-NEXT:   80 |     int a | 
 | // CHECK-NEXT:      | [sizeof=96, align=16 | 
 | // CHECK-NEXT:      |  nvsize=64, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct F3 | 
 | // CHECK-X64-NEXT:    0 |   (F3 vftable pointer) | 
 | // CHECK-X64-NEXT:   16 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:   16 |     int a | 
 | // CHECK-X64-NEXT:   24 |   (F3 vbtable pointer) | 
 | // CHECK-X64-NEXT:   48 |   int a | 
 | // CHECK-X64-NEXT:   64 |   struct A16f (virtual base) | 
 | // CHECK-X64-NEXT:   64 |     (A16f vftable pointer) | 
 | // CHECK-X64-NEXT:   80 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=96, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=64, nvalign=16] | 
 |  | 
 | struct F4 : A4, B { | 
 | 	__declspec(align(16)) int a; | 
 | 	F4() : a(0xf00000f4) {} | 
 | 	virtual void g() {printf("F4");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct F4 | 
 | // CHECK-NEXT:    0 |   (F4 vftable pointer) | 
 | // CHECK-NEXT:   16 |   struct A4 (base) | 
 | // CHECK-NEXT:   16 |     int a | 
 | // CHECK-NEXT:   32 |   struct B (base) | 
 | // CHECK-NEXT:   32 |     struct A4 (base) | 
 | // CHECK-NEXT:   32 |       int a | 
 | // CHECK-NEXT:   36 |     struct Y (base) | 
 | // CHECK-NEXT:   36 |       char y | 
 | // CHECK-NEXT:   48 |     struct X (base) | 
 | // CHECK-NEXT:   48 |       (X vbtable pointer) | 
 | // CHECK-NEXT:   52 |     int a | 
 | // CHECK-NEXT:   64 |   int a | 
 | // CHECK-NEXT:   80 |   struct A16f (virtual base) | 
 | // CHECK-NEXT:   80 |     (A16f vftable pointer) | 
 | // CHECK-NEXT:   96 |     int a | 
 | // CHECK-NEXT:      | [sizeof=112, align=16 | 
 | // CHECK-NEXT:      |  nvsize=80, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct F4 | 
 | // CHECK-X64-NEXT:    0 |   (F4 vftable pointer) | 
 | // CHECK-X64-NEXT:   16 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:   16 |     int a | 
 | // CHECK-X64-NEXT:   32 |   struct B (base) | 
 | // CHECK-X64-NEXT:   32 |     struct A4 (base) | 
 | // CHECK-X64-NEXT:   32 |       int a | 
 | // CHECK-X64-NEXT:   36 |     struct Y (base) | 
 | // CHECK-X64-NEXT:   36 |       char y | 
 | // CHECK-X64-NEXT:   48 |     struct X (base) | 
 | // CHECK-X64-NEXT:   48 |       (X vbtable pointer) | 
 | // CHECK-X64-NEXT:   56 |     int a | 
 | // CHECK-X64-NEXT:   64 |   int a | 
 | // CHECK-X64-NEXT:   80 |   struct A16f (virtual base) | 
 | // CHECK-X64-NEXT:   80 |     (A16f vftable pointer) | 
 | // CHECK-X64-NEXT:   96 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=112, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=80, nvalign=16] | 
 |  | 
 | struct F5 : A16f, virtual A4 { | 
 | 	int a; | 
 | 	F5() : a(0xf00000f5) {} | 
 | 	virtual void g() {printf("F5");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct F5 | 
 | // CHECK-NEXT:    0 |   struct A16f (primary base) | 
 | // CHECK-NEXT:    0 |     (A16f vftable pointer) | 
 | // CHECK-NEXT:   16 |     int a | 
 | // CHECK-NEXT:   32 |   (F5 vbtable pointer) | 
 | // CHECK-NEXT:   48 |   int a | 
 | // CHECK-NEXT:   64 |   struct A4 (virtual base) | 
 | // CHECK-NEXT:   64 |     int a | 
 | // CHECK-NEXT:      | [sizeof=80, align=16 | 
 | // CHECK-NEXT:      |  nvsize=64, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct F5 | 
 | // CHECK-X64-NEXT:    0 |   struct A16f (primary base) | 
 | // CHECK-X64-NEXT:    0 |     (A16f vftable pointer) | 
 | // CHECK-X64-NEXT:   16 |     int a | 
 | // CHECK-X64-NEXT:   32 |   (F5 vbtable pointer) | 
 | // CHECK-X64-NEXT:   48 |   int a | 
 | // CHECK-X64-NEXT:   64 |   struct A4 (virtual base) | 
 | // CHECK-X64-NEXT:   64 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=80, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=64, nvalign=16] | 
 |  | 
 | struct F6 : virtual A16f, A4, virtual B { | 
 | 	int a; | 
 | 	F6() : a(0xf00000f6) {} | 
 | 	virtual void g() {printf("F6");} | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct F6 | 
 | // CHECK-NEXT:    0 |   (F6 vftable pointer) | 
 | // CHECK-NEXT:    4 |   struct A4 (base) | 
 | // CHECK-NEXT:    4 |     int a | 
 | // CHECK-NEXT:    8 |   (F6 vbtable pointer) | 
 | // CHECK-NEXT:   12 |   int a | 
 | // CHECK-NEXT:   16 |   struct A16f (virtual base) | 
 | // CHECK-NEXT:   16 |     (A16f vftable pointer) | 
 | // CHECK-NEXT:   32 |     int a | 
 | // CHECK-NEXT:   48 |   struct B (virtual base) | 
 | // CHECK-NEXT:   48 |     struct A4 (base) | 
 | // CHECK-NEXT:   48 |       int a | 
 | // CHECK-NEXT:   52 |     struct Y (base) | 
 | // CHECK-NEXT:   52 |       char y | 
 | // CHECK-NEXT:   64 |     struct X (base) | 
 | // CHECK-NEXT:   64 |       (X vbtable pointer) | 
 | // CHECK-NEXT:   68 |     int a | 
 | // CHECK-NEXT:      | [sizeof=80, align=16 | 
 | // CHECK-NEXT:      |  nvsize=16, nvalign=16] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct F6 | 
 | // CHECK-X64-NEXT:    0 |   (F6 vftable pointer) | 
 | // CHECK-X64-NEXT:    8 |   struct A4 (base) | 
 | // CHECK-X64-NEXT:    8 |     int a | 
 | // CHECK-X64-NEXT:   16 |   (F6 vbtable pointer) | 
 | // CHECK-X64-NEXT:   24 |   int a | 
 | // CHECK-X64-NEXT:   32 |   struct A16f (virtual base) | 
 | // CHECK-X64-NEXT:   32 |     (A16f vftable pointer) | 
 | // CHECK-X64-NEXT:   48 |     int a | 
 | // CHECK-X64-NEXT:   64 |   struct B (virtual base) | 
 | // CHECK-X64-NEXT:   64 |     struct A4 (base) | 
 | // CHECK-X64-NEXT:   64 |       int a | 
 | // CHECK-X64-NEXT:   68 |     struct Y (base) | 
 | // CHECK-X64-NEXT:   68 |       char y | 
 | // CHECK-X64-NEXT:   80 |     struct X (base) | 
 | // CHECK-X64-NEXT:   80 |       (X vbtable pointer) | 
 | // CHECK-X64-NEXT:   88 |     int a | 
 | // CHECK-X64-NEXT:      | [sizeof=96, align=16 | 
 | // CHECK-X64-NEXT:      |  nvsize=32, nvalign=16] | 
 |  | 
 | struct ArrayFieldOfRecords { | 
 |   A4 InlineElts[2]; | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct ArrayFieldOfRecords | 
 | // CHECK-NEXT:    0 |   struct A4 [2] InlineElts | 
 | // CHECK-NEXT:      | [sizeof=8, align=4 | 
 | // CHECK-NEXT:      |  nvsize=8, nvalign=4] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct ArrayFieldOfRecords | 
 | // CHECK-X64-NEXT:    0 |   struct A4 [2] InlineElts | 
 | // CHECK-X64-NEXT:      | [sizeof=8, align=4 | 
 | // CHECK-X64-NEXT:      |  nvsize=8, nvalign=4] | 
 |  | 
 | struct ArrayOfArrayFieldOfRecords { | 
 |   A4 InlineElts[2][2]; | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct ArrayOfArrayFieldOfRecords | 
 | // CHECK-NEXT:    0 |   struct A4 [2][2] InlineElts | 
 | // CHECK-NEXT:      | [sizeof=16, align=4 | 
 | // CHECK-NEXT:      |  nvsize=16, nvalign=4] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct ArrayOfArrayFieldOfRecords | 
 | // CHECK-X64-NEXT:    0 |   struct A4 [2][2] InlineElts | 
 | // CHECK-X64-NEXT:      | [sizeof=16, align=4 | 
 | // CHECK-X64-NEXT:      |  nvsize=16, nvalign=4] | 
 |  | 
 | struct RecordArrayTypedef { | 
 |   typedef A4 ArrayTy[2]; | 
 |   ArrayTy InlineElts[2]; | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct RecordArrayTypedef | 
 | // CHECK-NEXT:    0 |   RecordArrayTypedef::ArrayTy [2] InlineElts | 
 | // CHECK-NEXT:      | [sizeof=16, align=4 | 
 | // CHECK-NEXT:      |  nvsize=16, nvalign=4] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct RecordArrayTypedef | 
 | // CHECK-X64-NEXT:    0 |   RecordArrayTypedef::ArrayTy [2] InlineElts | 
 | // CHECK-X64-NEXT:      | [sizeof=16, align=4 | 
 | // CHECK-X64-NEXT:      |  nvsize=16, nvalign=4] | 
 |  | 
 | struct EmptyIntMemb { | 
 |   int FlexArrayMemb[0]; | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct EmptyIntMemb | 
 | // CHECK-NEXT:    0 |   int [0] FlexArrayMemb | 
 | // CHECK-NEXT:      | [sizeof=1, align=4 | 
 | // CHECK-NEXT:      |  nvsize=0, nvalign=4] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct EmptyIntMemb | 
 | // CHECK-X64-NEXT:    0 |   int [0] FlexArrayMemb | 
 | // CHECK-X64-NEXT:      | [sizeof=4, align=4 | 
 | // CHECK-X64-NEXT:      |  nvsize=0, nvalign=4] | 
 |  | 
 | struct EmptyLongLongMemb { | 
 |   long long FlexArrayMemb[0]; | 
 | }; | 
 |  | 
 | // CHECK: *** Dumping AST Record Layout | 
 | // CHECK-NEXT:    0 | struct EmptyLongLongMemb | 
 | // CHECK-NEXT:    0 |   long long [0] FlexArrayMemb | 
 | // CHECK-NEXT:      | [sizeof=1, align=8 | 
 | // CHECK-NEXT:      |  nvsize=0, nvalign=8] | 
 | // CHECK-X64: *** Dumping AST Record Layout | 
 | // CHECK-X64-NEXT:    0 | struct EmptyLongLongMemb | 
 | // CHECK-X64-NEXT:    0 |   long long [0] FlexArrayMemb | 
 | // CHECK-X64-NEXT:      | [sizeof=8, align=8 | 
 | // CHECK-X64-NEXT:      |  nvsize=0, nvalign=8] | 
 |  | 
 | int a[ | 
 | sizeof(TestF0)+ | 
 | sizeof(TestF1)+ | 
 | sizeof(TestF2)+ | 
 | sizeof(TestF3)+ | 
 | sizeof(TestF4)+ | 
 | sizeof(TestF5)+ | 
 | sizeof(TestF6)+ | 
 | sizeof(TestF7)+ | 
 | sizeof(TestF8)+ | 
 | sizeof(TestF9)+ | 
 | sizeof(TestFA)+ | 
 | sizeof(TestFB)+ | 
 | sizeof(TestFC)+ | 
 | sizeof(F0)+ | 
 | sizeof(F1)+ | 
 | sizeof(F2)+ | 
 | sizeof(F3)+ | 
 | sizeof(F4)+ | 
 | sizeof(F5)+ | 
 | sizeof(F6)+ | 
 | sizeof(ArrayFieldOfRecords)+ | 
 | sizeof(ArrayOfArrayFieldOfRecords)+ | 
 | sizeof(RecordArrayTypedef)+ | 
 | sizeof(EmptyIntMemb)+ | 
 | sizeof(EmptyLongLongMemb)+ | 
 | 0]; |