1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ 2dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// RUN: | FileCheck %s 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ 47967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// RUN: | FileCheck %s -check-prefix CHECK-X64 5dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 6dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntextern "C" int printf(const char *fmt, ...); 7dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 8dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B0 { 9dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 10dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B0() : a(0xf00000B0) {} 11dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 12dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) B1 { 13dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 14dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B1() : a(0xf00000B1) {} 15dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 16dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B2 { 17dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt __declspec(align(16)) int a; 18dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B2() : a(0xf00000B2) {} 19dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 20dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) B3 { 21dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt long long a1; 22dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 23dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B3() : a(0xf00000B3), a1(0xf00000B3f00000B3ll) {} 24dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 25dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct V { 26dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt char a; 27dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt V() : a(0X11) {} 28dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 29dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(32)) A16 {}; 30dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct V1 : A16 { virtual void f() {} }; 31dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct V2 { 32dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt long long a; 33dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a1; 34dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt V2() : a(0xf0000011f0000011ll), a1(0xf0000011) {} 35dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 36dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct V3 { 37dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 38dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt V3() : a(0xf0000022) {} 39dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 40dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) A16X { 41dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 42dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) B0X { 43dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a, a1; 44dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B0X() : a(0xf00000B0), a1(0xf00000B0) {} 45dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 46dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B1X { 47dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 48dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B1X() : a(0xf00000B1) {} 49dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 50dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B2X { 51dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 52dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B2X() : a(0xf00000B2) {} 53dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 54dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) B3X { 55dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 56dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B3X() : a(0xf00000B3) {} 57dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {} 58dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 59dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B4X : A16X { 60dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a, a1; 61dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B4X() : a(0xf00000B4), a1(0xf00000B4) {} 62dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 63dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B5X : virtual A16X { 64dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a, a1; 65dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B5X() : a(0xf00000B5), a1(0xf00000B5) {} 66dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 67dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B6X { 68dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 69dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B6X() : a(0xf00000B6) {} 70dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 71dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 72dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct A : B1, B0, B2, virtual V { 73dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 74dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt A() : a(0xf000000A) {} 75dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 76dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 77dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 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-NEXT: 0 | struct A 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct B1 (base) 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct B0 (base) 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | int a 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct B2 (base) 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | (A vbtable pointer) 90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | struct V (virtual base) 92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | char a 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=80, align=16 94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=64, nvalign=16] 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: *** Dumping AST Record Layout 997967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct A 101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct B1 (base) 102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 4 | struct B0 (base) 104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 4 | int a 105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct B2 (base) 106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | (A vbtable pointer) 108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | struct V (virtual base) 110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | char a 111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=80, align=16 112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=64, nvalign=16] 113dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 114dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct B : B2, B0, B1, virtual V { 115dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 116dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B() : a(0xf000000B) {} 117dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 118dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 119dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct B 121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct B2 (base) 122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct B0 (base) 124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | struct B1 (base) 126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | int a 127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 36 | (B vbtable pointer) 128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 52 | int a 129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | struct V (virtual base) 130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | char a 131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=80, align=16 132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=64, nvalign=16] 1337967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct B 135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct B2 (base) 136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct B0 (base) 138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct B1 (base) 140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | int a 141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 40 | (B vbtable pointer) 142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 52 | int a 143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | struct V (virtual base) 144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | char a 145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=80, align=16 146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=64, nvalign=16] 147dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 148dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct C : B1, B0, virtual V { 149dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 150dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt long long a1; 151dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt C() : a(0xf000000C), a1(0xf000000Cf000000Cll) {} 152dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 153dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 154dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 155651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct C 156651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct B1 (base) 157651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 158651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | struct B0 (base) 159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | int a 160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | (C vbtable pointer) 161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 24 | int a 162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | long long a1 163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct V (virtual base) 164651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | char a 165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=64, align=16 166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=48, nvalign=16] 1677967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct C 169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct B1 (base) 170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 4 | struct B0 (base) 172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 4 | int a 173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | (C vbtable pointer) 174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a 175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | long long a1 176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct V (virtual base) 177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | char a 178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=64, align=16 179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=48, nvalign=16] 180dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 181dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct D : B2, B0, virtual V { 182dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 183dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt D() : a(0xf000000D) {} 184dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 185dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 186dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct D 188651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct B2 (base) 189651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 190651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct B0 (base) 191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 192651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | (D vbtable pointer) 193651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 36 | int a 194651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct V (virtual base) 195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | char a 196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=64, align=16 197651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=48, nvalign=16] 1987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct D 200651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct B2 (base) 201651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct B0 (base) 203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | (D vbtable pointer) 205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 36 | int a 206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct V (virtual base) 207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | char a 208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=64, align=16 209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=48, nvalign=16] 210dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 211dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct E : B3, B0, virtual V { 212dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 213dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt E() : a(0xf000000E) {} 214dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 215dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 216dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 217651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 218651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct E 219651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct B3 (base) 220651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | long long a1 221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | int a 222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct B0 (base) 223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | (E vbtable pointer) 225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 36 | int a 226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct V (virtual base) 227651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | char a 228651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=64, align=16 229651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=48, nvalign=16] 230651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 2317967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 232651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct E 233651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct B3 (base) 234651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | long long a1 235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | int a 236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct B0 (base) 237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | (E vbtable pointer) 239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 36 | int a 240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct V (virtual base) 241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | char a 242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=64, align=16 243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=48, nvalign=16] 244dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 245dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct F : B0, virtual V1 { 246dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt __declspec(align(16)) int a; 247dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt F() : a(0xf000000F) {} 248dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void f() {} 249dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 250dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 251dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 252651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 254651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct F 255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct B0 (base) 256651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 257651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | (F vbtable pointer) 258651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | int a 259651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 92 | (vtordisp for vbase V1) 260651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 96 | struct V1 (virtual base) 261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 96 | (V1 vftable pointer) 262651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 128 | struct A16 (base) (empty) 263651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=128, align=32 264651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=48, nvalign=32] 2657967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 266651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 267651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 268651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct F 269651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct B0 (base) 270651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | (F vbtable pointer) 272651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | int a 273651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 92 | (vtordisp for vbase V1) 274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 96 | struct V1 (virtual base) 275651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 96 | (V1 vftable pointer) 276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 128 | struct A16 (base) (empty) 277651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=128, align=32 278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=48, nvalign=32] 279dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 280dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct G : virtual V2, virtual V3 { 281dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 282dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt G() : a(0xf0000001) {} 283dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 284dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 285dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 287651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct G 289651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (G vbtable pointer) 290651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | int a 291651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | struct V2 (virtual base) 292651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 8 | long long a 293651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a1 294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 24 | struct V3 (virtual base) 295651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 24 | int a 296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=28, align=8 297651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=8, nvalign=8] 2987967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 299651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 300651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 301651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct G 302651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (G vbtable pointer) 303651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | int a 304651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct V2 (virtual base) 305651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | long long a 306651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a1 307651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | struct V3 (virtual base) 308651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | int a 309651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=40, align=8 310651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=16, nvalign=8] 311dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 312dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct H { 313dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt __declspec(align(16)) int a; 314dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int b; 315dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt H() : a(0xf0000010), b(0xf0000010) {} 316dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 317dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 318dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 319651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct H 320651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 321651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | int b 322651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=16, align=16 323651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=16, nvalign=16] 3247967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 325651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct H 326651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 327651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 4 | int b 328651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=16, align=16 329651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=16, nvalign=16] 330dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 331dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct I { 332dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt B2 a; 333dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int b; 334dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt I() : b(0xf0000010) {} 335dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 336dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 337dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 338651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct I 339651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct B2 a 340651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | int a 341651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: 16 | int b 342651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=32, align=16 343651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=32, nvalign=16] 3447967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 345651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct I 346651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct B2 a 347651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | int a 348651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: 16 | int b 349651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=32, align=16 350651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=32, nvalign=16] 351dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 352dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct AX : B0X, virtual B2X, virtual B6X, virtual B3X { 353dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 354dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt AX() : a(0xf000000A) {} 355dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void f() {} 356dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {} 357dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 358dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 359dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 360651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 361651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 362651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 363651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 364651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct AX 365651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (AX vftable pointer) 366651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct B0X (base) 367651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 368651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | int a1 369651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 24 | (AX vbtable pointer) 370651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 40 | int a 371651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | struct B2X (virtual base) 372651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 373651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 52 | struct B6X (virtual base) 374651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 52 | int a 375651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 76 | (vtordisp for vbase B3X) 376651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 80 | struct B3X (virtual base) 377651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 80 | (B3X vftable pointer) 378651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 84 | int a 379651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=96, align=16 380651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=48, nvalign=16] 381651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 382651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 3837967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 384651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 385651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 386651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct AX 387651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (AX vftable pointer) 388651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct B0X (base) 389651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 390651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 20 | int a1 391651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | (AX vbtable pointer) 392651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 40 | int a 393651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct B2X (virtual base) 394651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 395651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 52 | struct B6X (virtual base) 396651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 52 | int a 397651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 76 | (vtordisp for vbase B3X) 398651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | struct B3X (virtual base) 399651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | (B3X vftable pointer) 400651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 88 | int a 401651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=96, align=16 402651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=48, nvalign=16] 403dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 404dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct BX : B4X, virtual B2X, virtual B6X, virtual B3X { 405dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 406dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt BX() : a(0xf000000B) {} 407dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void f() {} 408dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {} 409dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 410dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 411dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 412651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 413651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 414651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct BX 415651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (BX vftable pointer) 416651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct B4X (base) 417651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct A16X (base) (empty) 418651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | int a 419651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | int a1 420651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | (BX vbtable pointer) 421651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 48 | int a 422651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | struct B2X (virtual base) 423651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | int a 424651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 68 | struct B6X (virtual base) 425651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 68 | int a 426651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 92 | (vtordisp for vbase B3X) 427651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 96 | struct B3X (virtual base) 428651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 96 | (B3X vftable pointer) 429651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 100 | int a 430651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=112, align=16 431651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=64, nvalign=16] 4327967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 433651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 434651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 435651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct BX 436651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (BX vftable pointer) 437651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct B4X (base) 438651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct A16X (base) (empty) 439651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | int a 440651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 20 | int a1 441651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | (BX vbtable pointer) 442651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 443651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | struct B2X (virtual base) 444651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 64 | int a 445651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 68 | struct B6X (virtual base) 446651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 68 | int a 447651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 92 | (vtordisp for vbase B3X) 448651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 96 | struct B3X (virtual base) 449651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 96 | (B3X vftable pointer) 450651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 104 | int a 451651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=112, align=16 452651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=64, nvalign=16] 453dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 454dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct CX : B5X, virtual B2X, virtual B6X, virtual B3X { 455dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 456dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt CX() : a(0xf000000C) {} 457dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void f() {} 458dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void g() {} 459dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 460dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 461dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 462651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: *** Dumping AST Record Layout 463651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct CX 464651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (CX vftable pointer) 465651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | struct B5X (base) 466651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 16 | (B5X vbtable pointer) 467651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 20 | int a 468651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 24 | int a1 469651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 28 | int a 470651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | struct A16X (virtual base) (empty) 471651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | struct B2X (virtual base) 472651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 32 | int a 473651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 36 | struct B6X (virtual base) 474651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 36 | int a 475651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 60 | (vtordisp for vbase B3X) 476651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | struct B3X (virtual base) 477651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 64 | (B3X vftable pointer) 478651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 68 | int a 479651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=80, align=16 480651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=32, nvalign=16] 481651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64: *** Dumping AST Record Layout 4827967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 483651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct CX 484651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (CX vftable pointer) 485651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | struct B5X (base) 486651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 16 | (B5X vbtable pointer) 487651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 24 | int a 488651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 28 | int a1 489651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 32 | int a 490651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct A16X (virtual base) (empty) 491651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | struct B2X (virtual base) 492651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 48 | int a 493651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 52 | struct B6X (virtual base) 494651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 52 | int a 495651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 76 | (vtordisp for vbase B3X) 496651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | struct B3X (virtual base) 497651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 80 | (B3X vftable pointer) 498651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 88 | int a 499651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=96, align=16 500651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=48, nvalign=16] 501dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 502dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntstruct __declspec(align(16)) DX { 503dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt int a; 504dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt DX() : a(0xf000000D) {} 505dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt virtual void f() {} 506dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt}; 507dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 508dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// CHECK: *** Dumping AST Record Layout 509651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | struct DX 510651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 0 | (DX vftable pointer) 511651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: 4 | int a 512651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | [sizeof=16, align=16 513651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: | nvsize=8, nvalign=16] 5147967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt// CHECK-X64: *** Dumping AST Record Layout 515651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | struct DX 516651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 0 | (DX vftable pointer) 517651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: 8 | int a 518651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | [sizeof=16, align=16 519651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-X64-NEXT: | nvsize=16, nvalign=16] 520dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt 521dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntint a[ 522dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(A)+ 523dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(B)+ 524dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(C)+ 525dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(D)+ 526dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(E)+ 527dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(F)+ 528dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(G)+ 529dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(H)+ 530dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(I)+ 531dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(AX)+ 532dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(BX)+ 533dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(CX)+ 534dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntsizeof(DX)]; 535