ms-x86-lazy-empty-nonvirtual-base.cpp revision 7967c95891c5f65f6312fbbcb999ac257d776914
1a2ccf8820a35582f38cf7f5af17db2513db55e2aWarren Hunt// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only -cxx-abi microsoft %s 2>/dev/null \ 2dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// RUN: | FileCheck %s 37967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only -cxx-abi microsoft %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 B0 { B0() { printf("B0 = %p\n", this); } }; 9dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B1 { B1() { printf("B1 = %p\n", this); } }; 10dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B2 { B2() { printf("B2 = %p\n", this); } }; 11dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B3 { B3() { printf("B3 = %p\n", this); } }; 12dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B4 { B4() { printf("B4 = %p\n", this); } }; 13dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B5 { B5() { printf("B5 = %p\n", this); } }; 14dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(2)) B6 { B6() { printf("B6 = %p\n", this); } }; 15dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) B7 { B7() { printf("B7 = %p\n", this); } }; 16dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B8 { char c[5]; B8() { printf("B8 = %p\n", this); } }; 17dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B9 { char c[6]; B9() { printf("B9 = %p\n", this); } }; 18dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B10 { char c[7]; B10() { printf("B10 = %p\n", this); } }; 19dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B11 { char c[8]; B11() { printf("B11 = %p\n", this); } }; 20dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B0X { B0X() { printf("B0 = %p\n", this); } }; 21dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B1X { B1X() { printf("B1 = %p\n", this); } }; 22dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) B2X { B2X() { printf("B2 = %p\n", this); } }; 23dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(2)) B3X { B3X() { printf("B3 = %p\n", this); } }; 24dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B4X { B4X() { printf("B4 = %p\n", this); } }; 25dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B5X { B5X() { printf("B5 = %p\n", this); } }; 26dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B6X { B6X() { printf("B6 = %p\n", this); } }; 27dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B8X { short a; B8X() : a(0xf00000B8) { printf("B8 = %p\n", this); } }; 28dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 29dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AA : B8, B1, virtual B0 { 30dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 31dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AA() : a(0xf00000AA) { printf("AA = %p\n", this); } 32dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 33dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 34dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 35dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AA 36dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B8 (base) 37dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [5] c 38dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 13 | struct B1 (base) (empty) 39dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AA vbtable pointer) 40dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | int a 41dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 20 | struct B0 (virtual base) (empty) 42dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=20, align=4 43dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=20, nvalign=4] 447967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 457967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AA 467967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B8 (base) 477967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [5] c 487967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 17 | struct B1 (base) (empty) 497967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AA vbtable pointer) 507967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 20 | int a 517967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 527967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 537967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 54dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 55dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AB : B8, B1, virtual B0 { 56dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt short a; 57dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AB() : a(0xf00000AB) { printf("AB = %p\n", this); } 58dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 59dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 60dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 61dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AB 62dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B8 (base) 63dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [5] c 64dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 13 | struct B1 (base) (empty) 65dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AB vbtable pointer) 66dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 14 | short a 67dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B0 (virtual base) (empty) 68dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=16, align=4 69dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=16, nvalign=4] 707967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 717967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AB 727967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B8 (base) 737967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [5] c 747967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 17 | struct B1 (base) (empty) 757967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AB vbtable pointer) 767967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 18 | short a 777967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 787967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 797967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 80dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 81dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AC : B8, B1, virtual B0 { 82dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt char a; 83dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AC() : a(0xf00000AC) { printf("AC = %p\n", this); } 84dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 85dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 86dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 87dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AC 88dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B8 (base) 89dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [5] c 90dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B1 (base) (empty) 91dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AC vbtable pointer) 92dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | char a 93dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B0 (virtual base) (empty) 94dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=16, align=4 95dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=16, nvalign=4] 967967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 977967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AC 987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B8 (base) 997967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [5] c 1007967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 1017967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AC vbtable pointer) 1027967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | char a 1037967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 1047967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 1057967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 106dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 107dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AD : B8, B1, virtual B0 { 108dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AD() { printf("AD = %p\n", this); } 109dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 110dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 111dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 112dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AD 113dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B8 (base) 114dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [5] c 115dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B1 (base) (empty) 116dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AD vbtable pointer) 117dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B0 (virtual base) (empty) 118dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=12, align=4 119dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=12, nvalign=4] 1207967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 1217967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AD 1227967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B8 (base) 1237967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [5] c 1247967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 1257967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AD vbtable pointer) 1267967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B0 (virtual base) (empty) 1277967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=16, align=8 1287967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=16, nvalign=8] 129dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 130dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AA1 : B9, B1, virtual B0 { 131dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 132dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AA1() : a(0xf0000AA1) { printf("AA1 = %p\n", this); } 133dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 134dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 135dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 136dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AA1 137dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B9 (base) 138dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [6] c 139dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 14 | struct B1 (base) (empty) 140dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AA1 vbtable pointer) 141dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | int a 142dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 20 | struct B0 (virtual base) (empty) 143dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=20, align=4 144dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=20, nvalign=4] 1457967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 1467967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AA1 1477967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B9 (base) 1487967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [6] c 1497967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 18 | struct B1 (base) (empty) 1507967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AA1 vbtable pointer) 1517967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 20 | int a 1527967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 1537967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 1547967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 155dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 156dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AB1 : B9, B1, virtual B0 { 157dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt short a; 158dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AB1() : a(0xf0000AB1) { printf("AB1 = %p\n", this); } 159dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 160dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 161dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 162dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AB1 163dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B9 (base) 164dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [6] c 165dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B1 (base) (empty) 166dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AB1 vbtable pointer) 167dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | short a 168dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B0 (virtual base) (empty) 169dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=16, align=4 170dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=16, nvalign=4] 1717967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 1727967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AB1 1737967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B9 (base) 1747967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [6] c 1757967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 1767967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AB1 vbtable pointer) 1777967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | short a 1787967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 1797967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 1807967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 181dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 182dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AC1 : B9, B1, virtual B0 { 183dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt char a; 184dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AC1() : a(0xf0000AC1) { printf("AC1 = %p\n", this); } 185dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 186dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 187dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 188dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AC1 189dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B9 (base) 190dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [6] c 191dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B1 (base) (empty) 192dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AC1 vbtable pointer) 193dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | char a 194dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B0 (virtual base) (empty) 195dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=16, align=4 196dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=16, nvalign=4] 1977967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 1987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AC1 1997967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B9 (base) 2007967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [6] c 2017967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 2027967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AC1 vbtable pointer) 2037967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | char a 2047967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 2057967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 2067967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 207dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 208dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AD1 : B9, B1, virtual B0 { 209dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AD1() { printf("AD1 = %p\n", this); } 210dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 211dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 212dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 213dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AD1 214dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B9 (base) 215dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [6] c 216dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B1 (base) (empty) 217dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AD1 vbtable pointer) 218dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B0 (virtual base) (empty) 219dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=12, align=4 220dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=12, nvalign=4] 2217967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 2227967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AD1 2237967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B9 (base) 2247967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [6] c 2257967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 2267967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AD1 vbtable pointer) 2277967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B0 (virtual base) (empty) 2287967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=16, align=8 2297967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=16, nvalign=8] 230dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 231dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AA2 : B10, B1, virtual B0 { 232dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 233dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AA2() : a(0xf0000AA2) { printf("AA2 = %p\n", this); } 234dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 235dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 236dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 237dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AA2 238dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B10 (base) 239dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [7] c 240dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 15 | struct B1 (base) (empty) 241dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AA2 vbtable pointer) 242dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | int a 243dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 20 | struct B0 (virtual base) (empty) 244dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=20, align=4 245dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=20, nvalign=4] 2467967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 2477967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AA2 2487967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B10 (base) 2497967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [7] c 2507967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 19 | struct B1 (base) (empty) 2517967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AA2 vbtable pointer) 2527967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 20 | int a 2537967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 2547967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 2557967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 256dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 257dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AB2 : B10, B1, virtual B0 { 258dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt short a; 259dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AB2() : a(0xf0000AB2) { printf("AB2 = %p\n", this); } 260dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 261dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 262dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 263dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AB2 264dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B10 (base) 265dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [7] c 266dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 13 | struct B1 (base) (empty) 267dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AB2 vbtable pointer) 268dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 14 | short a 269dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B0 (virtual base) (empty) 270dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=16, align=4 271dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=16, nvalign=4] 2727967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 2737967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AB2 2747967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B10 (base) 2757967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [7] c 2767967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 17 | struct B1 (base) (empty) 2777967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AB2 vbtable pointer) 2787967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 18 | short a 2797967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 2807967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 2817967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 282dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 283dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AC2 : B10, B1, virtual B0 { 284dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt char a; 285dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AC2() : a(0xf0000AC2) { printf("AC2 = %p\n", this); } 286dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 287dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 288dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 289dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AC2 290dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B10 (base) 291dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [7] c 292dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B1 (base) (empty) 293dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AC2 vbtable pointer) 294dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | char a 295dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B0 (virtual base) (empty) 296dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=16, align=4 297dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=16, nvalign=4] 2987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 2997967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AC2 3007967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B10 (base) 3017967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [7] c 3027967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 3037967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AC2 vbtable pointer) 3047967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | char a 3057967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 3067967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 3077967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 308dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 309dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AD2 : B10, B1, virtual B0 { 310dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AD2() { printf("AD2 = %p\n", this); } 311dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 312dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 313dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 314dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AD2 315dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B10 (base) 316dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [7] c 317dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B1 (base) (empty) 318dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AD2 vbtable pointer) 319dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B0 (virtual base) (empty) 320dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=12, align=4 321dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=12, nvalign=4] 3227967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 3237967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AD2 3247967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B10 (base) 3257967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [7] c 3267967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 3277967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AD2 vbtable pointer) 3287967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B0 (virtual base) (empty) 3297967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=16, align=8 3307967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=16, nvalign=8] 331dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 332dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AA3 : B11, B1, virtual B0 { 333dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 334dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AA3() : a(0xf0000AA3) { printf("AA3 = %p\n", this); } 335dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 336dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 337dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 338dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AA3 339dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B11 (base) 340dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [8] c 341dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B1 (base) (empty) 342dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AA3 vbtable pointer) 343dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | int a 344dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B0 (virtual base) (empty) 345dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=16, align=4 346dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=16, nvalign=4] 3477967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 3487967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AA3 3497967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B11 (base) 3507967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [8] c 3517967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 3527967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AA3 vbtable pointer) 3537967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | int a 3547967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 3557967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 3567967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 357dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 358dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AB3 : B11, B1, virtual B0 { 359dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt short a; 360dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AB3() : a(0xf0000AB3) { printf("AB3 = %p\n", this); } 361dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 362dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 363dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 364dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AB3 365dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B11 (base) 366dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [8] c 367dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B1 (base) (empty) 368dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AB3 vbtable pointer) 369dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | short a 370dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B0 (virtual base) (empty) 371dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=16, align=4 372dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=16, nvalign=4] 3737967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 3747967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AB3 3757967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B11 (base) 3767967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [8] c 3777967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 3787967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AB3 vbtable pointer) 3797967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | short a 3807967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 3817967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 3827967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 383dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 384dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AC3 : B11, B1, virtual B0 { 385dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt char a; 386dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AC3() : a(0xf0000AC3) { printf("AC3 = %p\n", this); } 387dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 388dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 389dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 390dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AC3 391dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B11 (base) 392dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [8] c 393dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B1 (base) (empty) 394dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AC3 vbtable pointer) 395dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | char a 396dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B0 (virtual base) (empty) 397dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=16, align=4 398dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=16, nvalign=4] 3997967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 4007967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AC3 4017967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B11 (base) 4027967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [8] c 4037967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 4047967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AC3 vbtable pointer) 4057967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | char a 4067967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 4077967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 4087967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 409dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 410dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AD3 : B11, B1, virtual B0 { 411dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AD3() { printf("AD3 = %p\n", this); } 412dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 413dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 414dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 415dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AD3 416dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B11 (base) 417dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [8] c 418dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B1 (base) (empty) 419dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (AD3 vbtable pointer) 420dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B0 (virtual base) (empty) 421dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=12, align=4 422dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=12, nvalign=4] 4237967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 4247967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AD3 4257967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B11 (base) 4267967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [8] c 4277967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 4287967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (AD3 vbtable pointer) 4297967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B0 (virtual base) (empty) 4307967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=16, align=8 4317967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=16, nvalign=8] 432dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 433dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B : B1, B2, virtual B0 { 434dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B() { printf("B = %p\n", this); } 435dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 436dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 437dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 438dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B 439dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B1 (base) (empty) 440dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | struct B2 (base) (empty) 441dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 4 | (B vbtable pointer) 442dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | struct B0 (virtual base) (empty) 443dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=8, align=4 444dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=8, nvalign=4] 4457967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 4467967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B 4477967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B1 (base) (empty) 4487967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B2 (base) (empty) 4497967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (B vbtable pointer) 4507967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B0 (virtual base) (empty) 4517967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=16, align=8 4527967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=16, nvalign=8] 453dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 454dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct C : B1, B2, B3, virtual B0 { 455dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt char a; 456dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt C() : a(0xf000000C) { printf("C = %p\n", this); } 457dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 458dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 459dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 460dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct C 461dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B1 (base) (empty) 462dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 1 | struct B2 (base) (empty) 463dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | struct B3 (base) (empty) 464dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 4 | (C vbtable pointer) 465dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | char a 466dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B0 (virtual base) (empty) 467dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=12, align=4 468dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=12, nvalign=4] 4697967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 4707967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct C 4717967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B1 (base) (empty) 4727967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 1 | struct B2 (base) (empty) 4737967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B3 (base) (empty) 4747967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (C vbtable pointer) 4757967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | char a 4767967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 4777967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 4787967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 479dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 480dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct D : B1, B2, B3, B4, B5, virtual B0 { 481dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 482dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt D() : a(0xf000000D) { printf("D = %p\n", this); } 483dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 484dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 485dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 486dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct D 487dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B1 (base) (empty) 488dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 1 | struct B2 (base) (empty) 489dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 2 | struct B3 (base) (empty) 490dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 3 | struct B4 (base) (empty) 491dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | struct B5 (base) (empty) 492dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 4 | (D vbtable pointer) 493dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | int a 494dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B0 (virtual base) (empty) 495dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=12, align=4 496dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=12, nvalign=4] 4977967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 4987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct D 4997967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B1 (base) (empty) 5007967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 1 | struct B2 (base) (empty) 5017967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 2 | struct B3 (base) (empty) 5027967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 3 | struct B4 (base) (empty) 5037967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B5 (base) (empty) 5047967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (D vbtable pointer) 5057967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | int a 5067967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 5077967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 5087967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 509dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 510dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct E : B1, B6, B3, B4, B5, virtual B0 { 511dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 512dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt E() : a(0xf000000E) { printf("E = %p\n", this); } 513dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 514dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 515dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 516dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct E 517dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B1 (base) (empty) 518dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 2 | struct B6 (base) (empty) 519dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 3 | struct B3 (base) (empty) 520dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 4 | struct B4 (base) (empty) 521dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 13 | struct B5 (base) (empty) 522dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (E vbtable pointer) 523dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | int a 524dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 20 | struct B0 (virtual base) (empty) 525dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=20, align=4 526dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=20, nvalign=4] 5277967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 5287967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct E 5297967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B1 (base) (empty) 5307967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 2 | struct B6 (base) (empty) 5317967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 3 | struct B3 (base) (empty) 5327967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 4 | struct B4 (base) (empty) 5337967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 17 | struct B5 (base) (empty) 5347967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (E vbtable pointer) 5357967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 20 | int a 5367967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 5377967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 5387967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 539dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 540dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F : B1, B6, B4, B8, B5, virtual B0 { 541dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 542dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt F() : a(0xf000000F) { printf("&a = %p\n", &a); printf("F = %p\n", this); } 543dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 544dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 545dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 546dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct F 547dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B1 (base) (empty) 548dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 2 | struct B6 (base) (empty) 549dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 3 | struct B4 (base) (empty) 550dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 3 | struct B8 (base) 551dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 3 | char [5] c 552dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | struct B5 (base) (empty) 553dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (F vbtable pointer) 554dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | int a 555dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B0 (virtual base) (empty) 556dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=16, align=4 557dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=16, nvalign=4] 5587967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 5597967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct F 5607967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B1 (base) (empty) 5617967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 2 | struct B6 (base) (empty) 5627967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 3 | struct B4 (base) (empty) 5637967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 3 | struct B8 (base) 5647967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 3 | char [5] c 5657967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B5 (base) (empty) 5667967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (F vbtable pointer) 5677967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | int a 5687967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0 (virtual base) (empty) 5697967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 5707967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 571dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 572dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct G : B8, B1, virtual B0 { 573dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 574dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt __declspec(align(16)) int a1; 575dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt G() : a(0xf0000010), a1(0xf0000010) { printf("G = %p\n", this); } 576dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 577dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 578dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 579dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct G 580dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B8 (base) 581dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | char [5] c 582dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 21 | struct B1 (base) (empty) 583dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 8 | (G vbtable pointer) 584dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 24 | int a 585dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 32 | int a1 586dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 48 | struct B0 (virtual base) (empty) 587dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=48, align=16 588dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=48, nvalign=16] 5897967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 5907967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct G 5917967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B8 (base) 5927967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | char [5] c 5937967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B1 (base) (empty) 5947967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (G vbtable pointer) 5957967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | int a 5967967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 32 | int a1 5977967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 48 | struct B0 (virtual base) (empty) 5987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=48, align=16 5997967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=48, nvalign=16] 600dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 601dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AX : B1X, B2X, B3X, B4X, virtual B0X { 602dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 603dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AX() : a(0xf000000A) { printf(" A = %p\n", this); } 604dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 605dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 606dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 607dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct AX 608dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B1X (base) (empty) 609dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B2X (base) (empty) 610dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 18 | struct B3X (base) (empty) 611dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 35 | struct B4X (base) (empty) 612dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 20 | (AX vbtable pointer) 613dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 36 | int a 614dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 48 | struct B0X (virtual base) (empty) 615dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=48, align=16 616dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=48, nvalign=16] 6177967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 6187967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct AX 6197967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B1X (base) (empty) 6207967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 16 | struct B2X (base) (empty) 6217967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 18 | struct B3X (base) (empty) 6227967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 33 | struct B4X (base) (empty) 6237967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | (AX vbtable pointer) 6247967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 36 | int a 6257967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 48 | struct B0X (virtual base) (empty) 6267967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=48, align=16 6277967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=48, nvalign=16] 628dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 629dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct BX : B2X, B1X, B3X, B4X, virtual B0X { 630dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 631dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt BX() : a(0xf000000B) { printf(" B = %p\n", this); } 632dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 633dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 634dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 635dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct BX 636dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B2X (base) (empty) 637dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 1 | struct B1X (base) (empty) 638dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 2 | struct B3X (base) (empty) 639dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 19 | struct B4X (base) (empty) 640dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 4 | (BX vbtable pointer) 641dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 20 | int a 642dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 32 | struct B0X (virtual base) (empty) 643dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=32, align=16 644dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=32, nvalign=16] 6457967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 6467967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct BX 6477967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B2X (base) (empty) 6487967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 1 | struct B1X (base) (empty) 6497967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 2 | struct B3X (base) (empty) 6507967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 17 | struct B4X (base) (empty) 6517967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (BX vbtable pointer) 6527967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 20 | int a 6537967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 32 | struct B0X (virtual base) (empty) 6547967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=32, align=16 6557967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=32, nvalign=16] 656dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 657dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct CX : B1X, B3X, B2X, virtual B0X { 658dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 659dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt CX() : a(0xf000000C) { printf(" C = %p\n", this); } 660dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 661dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 662dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 663dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct CX 664dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B1X (base) (empty) 665dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 2 | struct B3X (base) (empty) 666dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 32 | struct B2X (base) (empty) 667dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 4 | (CX vbtable pointer) 668dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 32 | int a 669dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 48 | struct B0X (virtual base) (empty) 670dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=48, align=16 671dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=48, nvalign=16] 6727967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 6737967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct CX 6747967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B1X (base) (empty) 6757967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 2 | struct B3X (base) (empty) 6767967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 32 | struct B2X (base) (empty) 6777967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (CX vbtable pointer) 6787967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 32 | int a 6797967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 48 | struct B0X (virtual base) (empty) 6807967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=48, align=16 6817967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=48, nvalign=16] 682dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 683dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct DX : B8X, B1X, virtual B0X { 684dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 685dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt DX() : a(0xf000000D) { printf(" D = %p\n", this); } 686dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 687dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 688dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 689dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct DX 690dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | struct B8X (base) 691dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 0 | short a 692dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 10 | struct B1X (base) (empty) 693dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 4 | (DX vbtable pointer) 694dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 12 | int a 695dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: 16 | struct B0X (virtual base) (empty) 696dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | [sizeof=16, align=4 697dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: | nvsize=16, nvalign=4] 6987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 6997967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct DX 7007967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | struct B8X (base) 7017967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 0 | short a 7027967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 18 | struct B1X (base) (empty) 7037967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 8 | (DX vbtable pointer) 7047967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 20 | int a 7057967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: 24 | struct B0X (virtual base) (empty) 7067967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | [sizeof=24, align=8 7077967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: | nvsize=24, nvalign=8] 708dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 709dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntint a[ 710dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AA)+ 711dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AB)+ 712dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AC)+ 713dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AD)+ 714dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AA1)+ 715dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AB1)+ 716dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AC1)+ 717dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AD1)+ 718dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AA2)+ 719dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AB2)+ 720dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AC2)+ 721dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AD2)+ 722dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AA3)+ 723dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AB3)+ 724dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AC3)+ 725dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AD3)+ 726dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(B)+ 727dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(C)+ 728dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(D)+ 729dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(E)+ 730dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F)+ 731dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(G)+ 732dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AX)+ 733dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(BX)+ 734dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(CX)+ 735dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(DX)]; 736