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