1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ 2dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// RUN: | FileCheck %s 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ 47967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// RUN: | FileCheck %s -check-prefix CHECK-X64 5dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 6dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntextern "C" int printf(const char *fmt, ...); 7dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 8dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct A4 { 9dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 10dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt A4() : a(0xf00000a4) {} 11dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 12dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 13dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B4 { 14dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 15dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B4() : a(0xf00000b4) {} 16dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 17dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 18dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct C4 { 19dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 20dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt C4() : a(0xf00000c4) {} 21dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void f() {printf("C4");} 22dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 23dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 24dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct A16 { 25dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt __declspec(align(16)) int a; 26dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt A16() : a(0xf0000a16) {} 27dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 28dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 29dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct C16 { 30dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt __declspec(align(16)) int a; 31dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt C16() : a(0xf0000c16) {} 32dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void f() {printf("C16");} 33dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 34dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 35dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF0 : A4, virtual B4 { 36dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 37dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestF0() : a(0xf00000F0) {} 38dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 39dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 40dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF0 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct A4 (base) 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | (TestF0 vbtable pointer) 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | int a 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | struct B4 (virtual base) 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | int a 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=16, align=4 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=12, nvalign=4] 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF0 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A4 (base) 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | (TestF0 vbtable pointer) 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | struct B4 (virtual base) 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=32, align=8 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=24, nvalign=8] 64dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 65dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF1 : A4, virtual A16 { 66dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 67dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestF1() : a(0xf00000f1) {} 68dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 69dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 70dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF1 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct A4 (base) 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | (TestF1 vbtable pointer) 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | int a 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A16 (virtual base) 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=32, align=16 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=12, nvalign=16] 81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF1 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A4 (base) 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | (TestF1 vbtable pointer) 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct A16 (virtual base) 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | int a 90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=48, align=16 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=24, nvalign=16] 92dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 93dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF2 : A4, virtual C4 { 94dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 95dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestF2() : a(0xf00000f2) {} 96dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 97dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 98dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF2 101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct A4 (base) 102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | (TestF2 vbtable pointer) 104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | int a 105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | struct C4 (virtual base) 106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | (C4 vftable pointer) 107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=20, align=4 109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=12, nvalign=4] 110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF2 113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A4 (base) 114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | (TestF2 vbtable pointer) 116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | struct C4 (virtual base) 118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | (C4 vftable pointer) 119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | int a 120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=40, align=8 121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=24, nvalign=8] 122dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 123dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF3 : A4, virtual C16 { 124dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 125dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestF3() : a(0xf00000f3) {} 126dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 127dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 128dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF3 131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct A4 (base) 132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | (TestF3 vbtable pointer) 134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | int a 135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct C16 (virtual base) 136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | (C16 vftable pointer) 137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | int a 138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=48, align=16 139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=12, nvalign=16] 140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF3 143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A4 (base) 144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | (TestF3 vbtable pointer) 146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct C16 (virtual base) 148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | (C16 vftable pointer) 149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=64, align=16 151651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=24, nvalign=16] 152dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 153dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF4 : TestF3, A4 { 154dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 155dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestF4() : a(0xf00000f4) {} 156dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 157dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 158dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF4 160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF3 (base) 161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct A4 (base) 162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | (TestF3 vbtable pointer) 164651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | int a 165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | struct A4 (base) 166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | int a 167651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | struct C16 (virtual base) 169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | (C16 vftable pointer) 170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=64, align=16 172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=32, nvalign=16] 173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF4 175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF3 (base) 176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A4 (base) 177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | (TestF3 vbtable pointer) 179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | struct A4 (base) 181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a 182651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 28 | int a 183651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct C16 (virtual base) 184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | (C16 vftable pointer) 185651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 186651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=64, align=16 187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=32, nvalign=16] 188dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 189dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF5 : TestF3, A4 { 190dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 191dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestF5() : a(0xf00000f5) {} 192dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("F5");} 193dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 194dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 195dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF5 197651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (TestF5 vftable pointer) 198651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct TestF3 (base) 199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A4 (base) 200651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 201651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | (TestF3 vbtable pointer) 202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 24 | int a 203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 28 | struct A4 (base) 204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 28 | int a 205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | int a 206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct C16 (virtual base) 207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | (C16 vftable pointer) 208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | int a 209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=80, align=16 210651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=48, nvalign=16] 211651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 212651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF5 213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (TestF5 vftable pointer) 214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct TestF3 (base) 215651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct A4 (base) 216651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 217651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | (TestF3 vbtable pointer) 218651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | int a 219651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 40 | struct A4 (base) 220651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 40 | int a 221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 44 | int a 222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct C16 (virtual base) 223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | (C16 vftable pointer) 224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | int a 225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=80, align=16 226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=48, nvalign=16] 227dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 228dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF6 : TestF3, A4 { 229dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 230dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestF6() : a(0xf00000f6) {} 231dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void f() {printf("F6");} 232dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 233dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 234dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF6 236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF3 (base) 237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct A4 (base) 238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | (TestF3 vbtable pointer) 240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | int a 241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | struct A4 (base) 242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | int a 243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 244651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 44 | (vtordisp for vbase C16) 245651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct C16 (virtual base) 246651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | (C16 vftable pointer) 247651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | int a 248651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=80, align=16 249651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=32, nvalign=16] 250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF6 252651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF3 (base) 253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A4 (base) 254651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | (TestF3 vbtable pointer) 256651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 257651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | struct A4 (base) 258651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a 259651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 28 | int a 260651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 44 | (vtordisp for vbase C16) 261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct C16 (virtual base) 262651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | (C16 vftable pointer) 263651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | int a 264651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=80, align=16 265651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=32, nvalign=16] 266dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 267dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF7 : A4, virtual C16 { 268dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 269dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestF7() : a(0xf00000f7) {} 270dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void f() {printf("F7");} 271dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 272dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 273dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF7 275651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct A4 (base) 276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 277651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | (TestF7 vbtable pointer) 278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | int a 279651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 28 | (vtordisp for vbase C16) 280651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | struct C16 (virtual base) 281651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | (C16 vftable pointer) 282651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 283651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=64, align=16 284651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=12, nvalign=16] 285651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF7 287651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A4 (base) 288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 289651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | (TestF7 vbtable pointer) 290651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 291651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 44 | (vtordisp for vbase C16) 292651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct C16 (virtual base) 293651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | (C16 vftable pointer) 294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | int a 295651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=80, align=16 296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=24, nvalign=16] 297dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 298dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF8 : TestF7, A4 { 299dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 300dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestF8() : a(0xf00000f8) {} 301dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void f() {printf("F8");} 302dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 303dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 304dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 305651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF8 306651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF7 (base) 307651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct A4 (base) 308651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 309651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | (TestF7 vbtable pointer) 310651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | int a 311651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | struct A4 (base) 312651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | int a 313651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 314651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 44 | (vtordisp for vbase C16) 315651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct C16 (virtual base) 316651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | (C16 vftable pointer) 317651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | int a 318651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=80, align=16 319651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=32, nvalign=16] 320651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 321651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF8 322651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF7 (base) 323651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A4 (base) 324651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 325651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | (TestF7 vbtable pointer) 326651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 327651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | struct A4 (base) 328651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a 329651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 28 | int a 330651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 44 | (vtordisp for vbase C16) 331651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct C16 (virtual base) 332651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | (C16 vftable pointer) 333651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | int a 334651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=80, align=16 335651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=32, nvalign=16] 336dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 337dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestF9 : A4, virtual C16 { 338dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 339dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestF9() : a(0xf00000f9) {} 340dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("F9");} 341dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 342dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 343dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 344651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF9 345651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (TestF9 vftable pointer) 346651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct A4 (base) 347651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | int a 348651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | (TestF9 vbtable pointer) 349651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | int a 350651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct C16 (virtual base) 351651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | (C16 vftable pointer) 352651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | int a 353651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=48, align=16 354651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=16, nvalign=16] 355651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 356651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF9 357651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (TestF9 vftable pointer) 358651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | struct A4 (base) 359651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | int a 360651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | (TestF9 vbtable pointer) 361651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a 362651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct C16 (virtual base) 363651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | (C16 vftable pointer) 364651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 365651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=64, align=16 366651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=32, nvalign=16] 367dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 368dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestFA : TestF9, A4 { 369dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 370dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestFA() : a(0xf00000fa) {} 371dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("FA");} 372dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 373dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 374dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 375651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestFA 376651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestF9 (primary base) 377651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (TestF9 vftable pointer) 378651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct A4 (base) 379651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | int a 380651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | (TestF9 vbtable pointer) 381651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | int a 382651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A4 (base) 383651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 384651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | int a 385651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | struct C16 (virtual base) 386651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | (C16 vftable pointer) 387651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 388651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=64, align=16 389651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=32, nvalign=16] 390651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 391651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestFA 392651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestF9 (primary base) 393651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (TestF9 vftable pointer) 394651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | struct A4 (base) 395651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | int a 396651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | (TestF9 vbtable pointer) 397651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a 398651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct A4 (base) 399651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | int a 400651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 36 | int a 401651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct C16 (virtual base) 402651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | (C16 vftable pointer) 403651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | int a 404651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=80, align=16 405651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=48, nvalign=16] 406dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 407dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestFB : A16, virtual C16 { 408dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 409dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestFB() : a(0xf00000fb) {} 410dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("Fb");} 411dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 412dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 413dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 414651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestFB 415651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (TestFB vftable pointer) 416651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A16 (base) 417651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 418651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | (TestFB vbtable pointer) 419651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 420651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | struct C16 (virtual base) 421651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | (C16 vftable pointer) 422651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 80 | int a 423651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=96, align=16 424651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=64, nvalign=16] 425651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 426651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestFB 427651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (TestFB vftable pointer) 428651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct A16 (base) 429651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 430651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | (TestFB vbtable pointer) 431651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 432651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | struct C16 (virtual base) 433651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | (C16 vftable pointer) 434651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | int a 435651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=96, align=16 436651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=64, nvalign=16] 437dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 438dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct TestFC : TestFB, A4 { 439dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 440dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt TestFC() : a(0xf00000fc) {} 441dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("FC");} 442dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 443dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 444dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 445651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestFC 446651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct TestFB (primary base) 447651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (TestFB vftable pointer) 448651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A16 (base) 449651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 450651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | (TestFB vbtable pointer) 451651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 452651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | struct A4 (base) 453651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | int a 454651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 68 | int a 455651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 80 | struct C16 (virtual base) 456651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 80 | (C16 vftable pointer) 457651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 96 | int a 458651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=112, align=16 459651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=80, nvalign=16] 460651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 461651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestFC 462651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct TestFB (primary base) 463651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (TestFB vftable pointer) 464651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct A16 (base) 465651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 466651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | (TestFB vbtable pointer) 467651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 468651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | struct A4 (base) 469651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | int a 470651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 68 | int a 471651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | struct C16 (virtual base) 472651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | (C16 vftable pointer) 473651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 96 | int a 474651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=112, align=16 475651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=80, nvalign=16] 476dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 477dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 478dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct A16f { 479dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt __declspec(align(16)) int a; 480dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt A16f() : a(0xf0000a16) {} 481dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void f() {printf("A16f");} 482dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 483dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 484dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct Y { char y; Y() : y(0xaa) {} }; 485dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct X : virtual A16f {}; 486dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 487dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B : A4, Y, X { 488dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 489dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B() : a(0xf000000b) {} 490dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 491dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 492dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F0 : A4, B { 493dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 494dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt F0() : a(0xf00000f0) {} 495dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("F0");} 496dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 497dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 498dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 499651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 500651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 501651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 502651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 503651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct F0 504651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (F0 vftable pointer) 505651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A4 (base) 506651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 507651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | struct B (base) 508651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | struct A4 (base) 509651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | int a 510651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 36 | struct Y (base) 511651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 36 | char y 512651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct X (base) 513651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | (X vbtable pointer) 514651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 52 | int a 515651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | int a 516651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 80 | struct A16f (virtual base) 517651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 80 | (A16f vftable pointer) 518651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 96 | int a 519651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=112, align=16 520651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=80, nvalign=16] 521651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 522651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 523651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 524651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 525651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 526651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct F0 527651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (F0 vftable pointer) 528651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct A4 (base) 529651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 530651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct B (base) 531651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct A4 (base) 532651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | int a 533651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 36 | struct Y (base) 534651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 36 | char y 535651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct X (base) 536651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | (X vbtable pointer) 537651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 56 | int a 538651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | int a 539651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | struct A16f (virtual base) 540651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | (A16f vftable pointer) 541651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 96 | int a 542651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=112, align=16 543651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=80, nvalign=16] 544dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 545dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F1 : B, A4 { 546dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 547dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt F1() : a(0xf00000f1) {} 548dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("F1");} 549dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 550dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 551dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 552651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct F1 553651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (F1 vftable pointer) 554651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct B (base) 555651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A4 (base) 556651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 557651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | struct Y (base) 558651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | char y 559651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | struct X (base) 560651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | (X vbtable pointer) 561651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 36 | int a 562651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct A4 (base) 563651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 564651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 52 | int a 565651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | struct A16f (virtual base) 566651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | (A16f vftable pointer) 567651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 80 | int a 568651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=96, align=16 569651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=64, nvalign=16] 570651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 571651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct F1 572651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (F1 vftable pointer) 573651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct B (base) 574651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct A4 (base) 575651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 576651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 20 | struct Y (base) 577651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 20 | char y 578651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct X (base) 579651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | (X vbtable pointer) 580651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 40 | int a 581651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct A4 (base) 582651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 583651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 52 | int a 584651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | struct A16f (virtual base) 585651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | (A16f vftable pointer) 586651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | int a 587651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=96, align=16 588651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=64, nvalign=16] 589dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 590dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F2 : A4, virtual A16f { 591dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 592dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt F2() : a(0xf00000f2) {} 593dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("F2");} 594dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 595dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 596dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 597651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct F2 598651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (F2 vftable pointer) 599651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct A4 (base) 600651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | int a 601651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | (F2 vbtable pointer) 602651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | int a 603651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A16f (virtual base) 604651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | (A16f vftable pointer) 605651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | int a 606651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=48, align=16 607651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=16, nvalign=16] 608651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 609651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct F2 610651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (F2 vftable pointer) 611651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | struct A4 (base) 612651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | int a 613651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | (F2 vbtable pointer) 614651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a 615651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct A16f (virtual base) 616651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | (A16f vftable pointer) 617651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 618651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=64, align=16 619651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=32, nvalign=16] 620dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 621dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F3 : A4, virtual A16f { 622dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt __declspec(align(16)) int a; 623dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt F3() : a(0xf00000f3) {} 624dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("F3");} 625dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 626dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 627dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 628651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct F3 629651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (F3 vftable pointer) 630651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A4 (base) 631651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 632651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | (F3 vbtable pointer) 633651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 634651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | struct A16f (virtual base) 635651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | (A16f vftable pointer) 636651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 80 | int a 637651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=96, align=16 638651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=64, nvalign=16] 639651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 640651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct F3 641651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (F3 vftable pointer) 642651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct A4 (base) 643651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 644651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | (F3 vbtable pointer) 645651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 646651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | struct A16f (virtual base) 647651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | (A16f vftable pointer) 648651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | int a 649651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=96, align=16 650651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=64, nvalign=16] 651dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 652dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F4 : A4, B { 653dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt __declspec(align(16)) int a; 654dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt F4() : a(0xf00000f4) {} 655dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("F4");} 656dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 657dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 658dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 659651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct F4 660651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (F4 vftable pointer) 661651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A4 (base) 662651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 663651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | struct B (base) 664651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | struct A4 (base) 665651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | int a 666651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 36 | struct Y (base) 667651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 36 | char y 668651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct X (base) 669651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | (X vbtable pointer) 670651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 52 | int a 671651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | int a 672651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 80 | struct A16f (virtual base) 673651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 80 | (A16f vftable pointer) 674651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 96 | int a 675651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=112, align=16 676651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=80, nvalign=16] 677651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 678651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct F4 679651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (F4 vftable pointer) 680651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct A4 (base) 681651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 682651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct B (base) 683651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct A4 (base) 684651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | int a 685651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 36 | struct Y (base) 686651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 36 | char y 687651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct X (base) 688651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | (X vbtable pointer) 689651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 56 | int a 690651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | int a 691651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | struct A16f (virtual base) 692651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | (A16f vftable pointer) 693651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 96 | int a 694651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=112, align=16 695651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=80, nvalign=16] 696dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 697dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F5 : A16f, virtual A4 { 698dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 699dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt F5() : a(0xf00000f5) {} 700dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("F5");} 701dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 702dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 703dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 704651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct F5 705651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct A16f (primary base) 706651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (A16f vftable pointer) 707651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 708651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | (F5 vbtable pointer) 709651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 710651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | struct A4 (virtual base) 711651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | int a 712651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=80, align=16 713651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=64, nvalign=16] 714651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 715651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct F5 716651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A16f (primary base) 717651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (A16f vftable pointer) 718651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 719651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | (F5 vbtable pointer) 720651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 721651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | struct A4 (virtual base) 722651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | int a 723651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=80, align=16 724651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=64, nvalign=16] 725dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 726dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F6 : virtual A16f, A4, virtual B { 727dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 728dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt F6() : a(0xf00000f6) {} 729dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {printf("F6");} 730dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 731dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 732dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 733651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct F6 734651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (F6 vftable pointer) 735651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct A4 (base) 736651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | int a 737651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | (F6 vbtable pointer) 738651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 12 | int a 739651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A16f (virtual base) 740651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | (A16f vftable pointer) 741651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | int a 742651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct B (virtual base) 743651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct A4 (base) 744651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 745651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 52 | struct Y (base) 746651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 52 | char y 747651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | struct X (base) 748651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | (X vbtable pointer) 749651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 68 | int a 750651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=80, align=16 751651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=16, nvalign=16] 752651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 753651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct F6 754651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (F6 vftable pointer) 755651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | struct A4 (base) 756651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | int a 757651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | (F6 vbtable pointer) 758651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a 759651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct A16f (virtual base) 760651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | (A16f vftable pointer) 761651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 762651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | struct B (virtual base) 763651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | struct A4 (base) 764651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | int a 765651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 68 | struct Y (base) 766651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 68 | char y 767651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | struct X (base) 768651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | (X vbtable pointer) 769651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 88 | int a 770651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=96, align=16 771651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=32, nvalign=16] 772651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 773651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct ArrayFieldOfRecords { 774651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines A4 InlineElts[2]; 775651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 776651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 777651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 778651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct ArrayFieldOfRecords 779651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct A4 [2] InlineElts 780651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=8, align=4 781651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=8, nvalign=4] 782651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 783651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct ArrayFieldOfRecords 784651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A4 [2] InlineElts 785651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=8, align=4 786651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=8, nvalign=4] 787651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 788651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct ArrayOfArrayFieldOfRecords { 789651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines A4 InlineElts[2][2]; 790651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 791651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 792651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 793651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct ArrayOfArrayFieldOfRecords 794651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct A4 [2][2] InlineElts 795651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=16, align=4 796651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=16, nvalign=4] 797651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 798651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct ArrayOfArrayFieldOfRecords 799651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A4 [2][2] InlineElts 800651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=16, align=4 801651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=16, nvalign=4] 802651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 803651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct RecordArrayTypedef { 804651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines typedef A4 ArrayTy[2]; 805651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines ArrayTy InlineElts[2]; 806651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 807651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 808651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 809651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct RecordArrayTypedef 810651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | ArrayTy [2] InlineElts 811651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=16, align=4 812651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=16, nvalign=4] 813651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 814651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct RecordArrayTypedef 815651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | ArrayTy [2] InlineElts 816651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=16, align=4 817651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=16, nvalign=4] 818dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 819dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntint a[ 820dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF0)+ 821dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF1)+ 822dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF2)+ 823dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF3)+ 824dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF4)+ 825dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF5)+ 826dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF6)+ 827dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF7)+ 828dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF8)+ 829dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestF9)+ 830dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestFA)+ 831dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestFB)+ 832dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(TestFC)+ 833dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F0)+ 834dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F1)+ 835dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F2)+ 836dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F3)+ 837dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F4)+ 838dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F5)+ 839651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(F6)+ 840651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(ArrayFieldOfRecords)+ 841651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(ArrayOfArrayFieldOfRecords)+ 842651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinessizeof(RecordArrayTypedef)+ 843651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines0]; 844