1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: | FileCheck %s 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: | FileCheck %s -check-prefix CHECK-X64 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" int printf(const char *fmt, ...); 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines__declspec(align(4096)) char buffer[4096]; 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct AT {}; 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct V : AT { 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines char c; 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines V() { 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("V - this: %d\n", (int)((char*)this - buffer)); 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct AT0 { 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines union { struct { int a; AT t; } y; int b; } x; 20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines char c; 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines AT0() { 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("AT0 - this: %d\n", (int)((char*)this - buffer)); 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct AT1 : V { 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int a; 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines AT1() { 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("AT1 - this: %d\n", (int)((char*)this - buffer)); 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct AT2 { 34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines AT0 t; 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines char AT2FieldName0; 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines AT2() { 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("AT2 - this: %d\n", (int)((char*)this - buffer)); 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("AT2 - Fiel: %d\n", (int)((char*)&AT2FieldName0 - buffer)); 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct AT3 : AT2, AT1 { 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines AT3() { 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("AT3 - this: %d\n", (int)((char*)this - buffer)); 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct AT3 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct AT2 (base) 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct AT0 t 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | union AT0::(anonymous at {{.*}} x 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct AT0::(anonymous at {{.*}} y 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct AT t (empty) 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: 0 | int b 64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: 8 | char c 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: 12 | char AT2FieldName0 66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | struct AT1 (base) 67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | struct V (base) 68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | struct AT (base) (empty) 69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | char c 70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 24 | int a 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=28, align=4 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=28, nvalign=4] 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct AT3 82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct AT2 (base) 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct AT0 t 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | union AT0::(anonymous at {{.*}} x 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct AT0::(anonymous at {{.*}} y 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 4 | struct AT t (empty) 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: 0 | int b 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: 8 | char c 90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: 12 | char AT2FieldName0 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 20 | struct AT1 (base) 92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 20 | struct V (base) 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 20 | struct AT (base) (empty) 94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 20 | char c 95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a 96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=28, align=4 97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=28, nvalign=4] 98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct BT0 { 100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines BT0() { 101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("BT0 - this: %d\n", (int)((char*)this - buffer)); 102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct BT2 : BT0 { 106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines char BT2FieldName0; 107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines BT2() { 108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("BT2 - this: %d\n", (int)((char*)this - buffer)); 109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("BT2 - Fiel: %d\n", (int)((char*)&BT2FieldName0 - buffer)); 110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct BT3 : BT0, BT2 { 114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines BT3() { 115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("BT3 - this: %d\n", (int)((char*)this - buffer)); 116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct BT3 123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct BT0 (base) (empty) 124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 1 | struct BT2 (base) 125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 1 | struct BT0 (base) (empty) 126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 1 | char BT2FieldName0 127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=2, align=1 128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=2, nvalign=1] 129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct BT3 133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct BT0 (base) (empty) 134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 1 | struct BT2 (base) 135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 1 | struct BT0 (base) (empty) 136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 1 | char BT2FieldName0 137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=2, align=1 138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=2, nvalign=1] 139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct T0 : AT { 141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines T0() { 142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("T0 (this) : %d\n", (int)((char*)this - buffer)); 143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct T1 : T0 { 147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines char a; 148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines T1() { 149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("T1 (this) : %d\n", (int)((char*)this - buffer)); 150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("T1 (fiel) : %d\n", (int)((char*)&a - buffer)); 151651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 152651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 153651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 154651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct T2 : AT { 155651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines char a; 156651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines T2() { 157651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("T2 (this) : %d\n", (int)((char*)this - buffer)); 158651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("T2 (fiel) : %d\n", (int)((char*)&a - buffer)); 159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct __declspec(align(1)) T3 : virtual T1, virtual T2 { 163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines T3() { 164651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines printf("T3 (this) : %d\n", (int)((char*)this - buffer)); 165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 167651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct T3 173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (T3 vbtable pointer) 174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct T1 (virtual base) 175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct T0 (base) (empty) 176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct AT (base) (empty) 177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | char a 178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | struct T2 (virtual base) 179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | struct AT (base) (empty) 180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | char a 181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=16, align=4 182651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=4, nvalign=4] 183651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 185651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 186651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct T3 188651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (T3 vbtable pointer) 189651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | struct T1 (virtual base) 190651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | struct T0 (base) (empty) 191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | struct AT (base) (empty) 192651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | char a 193651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct T2 (virtual base) 194651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct AT (base) (empty) 195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | char a 196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=24, align=8 197651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=8, nvalign=8] 198651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct B {}; 200651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct C { int a; }; 201651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct D : B, virtual C { B b; }; 202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct E : D, B {}; 203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct E 208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct D (base) 209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct B (base) (empty) 210651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (D vbtable pointer) 211651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct B b (empty) 212651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: 8 | struct B (base) (empty) 213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | struct C (virtual base) 214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | int a 215651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=12, align=4 216651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=8, nvalign=4] 217651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 218651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 219651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 220651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct E 222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct D (base) 223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | struct B (base) (empty) 224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (D vbtable pointer) 225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | struct B b (empty) 226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: 16 | struct B (base) (empty) 227651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct C (virtual base) 228651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 229651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=24, align=8 230651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=16, nvalign=8] 231651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 232651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct F : virtual D, virtual B {}; 233651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 234651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct F 235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (F vbtable pointer) 236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct C (virtual base) 237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | int a 238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | struct D (virtual base) 239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | struct B (base) (empty) 240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | (D vbtable pointer) 241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | struct B b (empty) 242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: 16 | struct B (virtual base) (empty) 243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=16, align=4 244651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=4, nvalign=4] 245651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 246651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct F 247651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (F vbtable pointer) 248651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | struct C (virtual base) 249651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | int a 250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct D (virtual base) 251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | struct B (base) (empty) 252651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | (D vbtable pointer) 253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | struct B b (empty) 254651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: 32 | struct B (virtual base) (empty) 255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=32, align=8 256651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=8, nvalign=8] 257651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 258651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct JC0 { 259651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines JC0() { printf("JC0 : %d\n", (int)((char*)this - buffer)); } 260651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct JC1 : JC0 { 262651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines virtual void f() {} 263651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines JC1() { printf("JC1 : %d\n", (int)((char*)this - buffer)); } 264651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 265651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct JC2 : JC1 { 266651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines JC2() { printf("JC2 : %d\n", (int)((char*)this - buffer)); } 267651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 268651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct JC4 : JC1, JC2 { 269651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines JC4() { printf("JC4 : %d\n", (int)((char*)this - buffer)); } 270651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 272651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 273651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 275651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct JC4 277651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct JC1 (primary base) 278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (JC1 vftable pointer) 279651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct JC0 (base) (empty) 280651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | struct JC2 (base) 281651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | struct JC1 (primary base) 282651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | (JC1 vftable pointer) 283651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | struct JC0 (base) (empty) 284651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=12, align=4 285651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=12, nvalign=4] 286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 287651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 289651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 290651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct JC4 291651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct JC1 (primary base) 292651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (JC1 vftable pointer) 293651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | struct JC0 (base) (empty) 294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct JC2 (base) 295651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct JC1 (primary base) 296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | (JC1 vftable pointer) 297651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | struct JC0 (base) (empty) 298651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=24, align=8 299651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=24, nvalign=8] 300651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 3016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RA {}; 3026bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RB { char c; }; 3036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RV {}; 3046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RW { char c; }; 3056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RY { RY() { printf("%Id\n", (char*)this - buffer); } }; 3066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX0 : RB, RA {}; 3076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX1 : RA, RB {}; 3086bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX2 : RA { char a; }; 3096bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX3 : RA { RB a; }; 3106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX4 { RA a; char b; }; 3116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX5 { RA a; RB b; }; 3126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX6 : virtual RV { RB a; }; 3136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX7 : virtual RW { RA a; }; 3146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RX8 : RA, virtual RW {}; 3156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 3166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ0 : RX0, RY {}; 3176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 3186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 3196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 3206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 3216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 3226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RZ0 3236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RX0 (base) 3246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RB (base) 3256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | char c 3266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 1 | struct RA (base) (empty) 3276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 2 | struct RY (base) (empty) 3286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=2, align=1 3296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=2, nvalign=1] 3306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 3316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 3326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 3336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 3346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 3356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RZ0 3366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RX0 (base) 3376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RB (base) 3386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | char c 3396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 1 | struct RA (base) (empty) 3406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 2 | struct RY (base) (empty) 3416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=2, align=1 3426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=2, nvalign=1] 3436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 3446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ1 : RX1, RY {}; 3456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 3466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 3476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RZ1 3486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RX1 (base) 3496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RA (base) (empty) 3506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RB (base) 3516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | char c 3526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 1 | struct RY (base) (empty) 3536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=1, align=1 3546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=1, nvalign=1] 3556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 3566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 3576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RZ1 3586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RX1 (base) 3596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RA (base) (empty) 3606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RB (base) 3616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | char c 3626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 1 | struct RY (base) (empty) 3636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=1, align=1 3646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=1, nvalign=1] 3656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 3666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ2 : RX2, RY {}; 3676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 3686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 3696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RZ2 3706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RX2 (base) 3716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RA (base) (empty) 3726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | char a 3736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 2 | struct RY (base) (empty) 3746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=2, align=1 3756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=2, nvalign=1] 3766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 3776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 3786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RZ2 3796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RX2 (base) 3806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RA (base) (empty) 3816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | char a 3826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 2 | struct RY (base) (empty) 3836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=2, align=1 3846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=2, nvalign=1] 3856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 3866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ3 : RX3, RY {}; 3876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 3886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 3896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RZ3 3906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RX3 (base) 3916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RA (base) (empty) 3926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RB a 3936bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | char c 3946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=1, align=1 3956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=1, nvalign=1] 3966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 1 | struct RY (base) (empty) 3976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=1, align=1 3986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=1, nvalign=1] 3996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 4006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 4016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RZ3 4026bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RX3 (base) 4036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RA (base) (empty) 4046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RB a 4056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | char c 4066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=1, align=1 4076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=1, nvalign=1] 4086bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 1 | struct RY (base) (empty) 4096bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=1, align=1 4106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=1, nvalign=1] 4116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 4126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ4 : RX4, RY {}; 4136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 4146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 4156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RZ4 4166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RX4 (base) 4176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RA a (empty) 4186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=1, align=1 4196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=0, nvalign=1] 4206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 1 | char b 4216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 3 | struct RY (base) (empty) 4226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=3, align=1 4236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=3, nvalign=1] 4246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 4256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 4266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RZ4 4276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RX4 (base) 4286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RA a (empty) 4296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=1, align=1 4306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=0, nvalign=1] 4316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 1 | char b 4326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 3 | struct RY (base) (empty) 4336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=3, align=1 4346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=3, nvalign=1] 4356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 4366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ5 : RX5, RY {}; 4376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 4386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 4396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RZ5 4406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RX5 (base) 4416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RA a (empty) 4426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=1, align=1 4436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=0, nvalign=1] 4446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 1 | struct RB b 4456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 1 | char c 4466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=1, align=1 4476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=1, nvalign=1] 4486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 2 | struct RY (base) (empty) 4496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=2, align=1 4506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=2, nvalign=1] 4516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 4526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 4536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RZ5 4546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RX5 (base) 4556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RA a (empty) 4566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=1, align=1 4576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=0, nvalign=1] 4586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 1 | struct RB b 4596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 1 | char c 4606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=1, align=1 4616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=1, nvalign=1] 4626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 2 | struct RY (base) (empty) 4636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=2, align=1 4646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=2, nvalign=1] 4656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 4666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ6 : RX6, RY {}; 4676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 4686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 4696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 4706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RZ6 4716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RX6 (base) 4726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | (RX6 vbtable pointer) 4736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 4 | struct RB a 4746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 4 | char c 4756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=1, align=1 4766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=1, nvalign=1] 4776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 9 | struct RY (base) (empty) 4786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 12 | struct RV (virtual base) (empty) 4796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=12, align=4 4806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=12, nvalign=4] 4816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 4826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 4836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 4846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RZ6 4856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RX6 (base) 4866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | (RX6 vbtable pointer) 4876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 8 | struct RB a 4886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 8 | char c 4896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=1, align=1 4906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=1, nvalign=1] 4916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 17 | struct RY (base) (empty) 4926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 24 | struct RV (virtual base) (empty) 4936bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=24, align=8 4946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=24, nvalign=8] 4956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 4966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ7 : RX7, RY {}; 4976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 4986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 4996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 5006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RZ7 5016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RX7 (base) 5026bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | (RX7 vbtable pointer) 5036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 4 | struct RA a (empty) 5046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=1, align=1 5056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=0, nvalign=1] 5066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 8 | struct RY (base) (empty) 5076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 8 | struct RW (virtual base) 5086bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 8 | char c 5096bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=9, align=4 5106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=8, nvalign=4] 5116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 5126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 5136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 5146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RZ7 5156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RX7 (base) 5166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | (RX7 vbtable pointer) 5176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 8 | struct RA a (empty) 5186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=1, align=1 5196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=0, nvalign=1] 5206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 16 | struct RY (base) (empty) 5216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 16 | struct RW (virtual base) 5226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 16 | char c 5236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=24, align=8 5246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=16, nvalign=8] 5256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 5266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct RZ8 : RX8, RY {}; 5276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 5286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 5296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RZ8 5306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct RX8 (base) 5316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 4 | struct RA (base) (empty) 5326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | (RX8 vbtable pointer) 5336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 4 | struct RY (base) (empty) 5346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 4 | struct RW (virtual base) 5356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 4 | char c 5366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=5, align=4 5376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=4, nvalign=4] 5386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 5396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 5406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RZ8 5416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct RX8 (base) 5426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 8 | struct RA (base) (empty) 5436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | (RX8 vbtable pointer) 5446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 8 | struct RY (base) (empty) 5456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 8 | struct RW (virtual base) 5466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 8 | char c 5476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=16, align=8 5486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=8, nvalign=8] 5496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 5506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct JA {}; 5516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct JB {}; 5526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct JC : JA { virtual void f() {} }; 5536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct JD : virtual JB, virtual JC { virtual void f() {} JD() {} }; 5546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 5556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 5566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 5576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 5586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: *** Dumping AST Record Layout 5596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | struct JD 5606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 0 | (JD vbtable pointer) 5616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 4 | struct JB (virtual base) (empty) 5626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 4 | (vtordisp for vbase JC) 5636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 8 | struct JC (virtual base) 5646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 8 | (JC vftable pointer) 5656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: 12 | struct JA (base) (empty) 5666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | [sizeof=12, align=4 5676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-NEXT: | nvsize=4, nvalign=4] 5686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 5696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 5706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 5716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64: *** Dumping AST Record Layout 5726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | struct JD 5736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 0 | (JD vbtable pointer) 5746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 8 | struct JB (virtual base) (empty) 5756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 12 | (vtordisp for vbase JC) 5766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 16 | struct JC (virtual base) 5776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 16 | (JC vftable pointer) 5786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: 24 | struct JA (base) (empty) 5796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | [sizeof=24, align=8 5806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK-X64-NEXT: | nvsize=8, nvalign=8] 5816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 582651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint a[ 583651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(AT3) + 584651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(BT3) + 585651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(T3) + 586651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(E) + 587651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(F) + 588651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(JC4) + 5896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ0) + 5906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ1) + 5916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ2) + 5926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ3) + 5936bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ4) + 5946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ5) + 5956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ6) + 5966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ7) + 5976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(RZ8) + 5986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessizeof(JD) + 599651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines0]; 600