1// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts %s 2>/dev/null \ 2// RUN: | FileCheck %s 3// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts %s 2>/dev/null \ 4// RUN: | FileCheck %s -check-prefix CHECK-X64 5 6extern "C" int printf(const char *fmt, ...); 7 8struct B0 { char a; B0() : a(0xB0) {} }; 9struct __declspec(align(1)) B1 {}; 10 11struct A : virtual B0 {}; 12 13// CHECK: *** Dumping AST Record Layout 14// CHECK: *** Dumping AST Record Layout 15// CHECK-NEXT: 0 | struct A 16// CHECK-NEXT: 0 | (A vbtable pointer) 17// CHECK-NEXT: 4 | struct B0 (virtual base) 18// CHECK-NEXT: 4 | char a 19// CHECK-NEXT: | [sizeof=5, align=4 20// CHECK-NEXT: | nvsize=4, nvalign=4] 21// CHECK-X64: *** Dumping AST Record Layout 22// CHECK-X64: *** Dumping AST Record Layout 23// CHECK-X64-NEXT: 0 | struct A 24// CHECK-X64-NEXT: 0 | (A vbtable pointer) 25// CHECK-X64-NEXT: 8 | struct B0 (virtual base) 26// CHECK-X64-NEXT: 8 | char a 27// CHECK-X64-NEXT: | [sizeof=16, align=8 28// CHECK-X64-NEXT: | nvsize=8, nvalign=8] 29 30struct __declspec(align(1)) B : virtual B0 {}; 31 32// CHECK: *** Dumping AST Record Layout 33// CHECK-NEXT: 0 | struct B 34// CHECK-NEXT: 0 | (B vbtable pointer) 35// CHECK-NEXT: 4 | struct B0 (virtual base) 36// CHECK-NEXT: 4 | char a 37// CHECK-NEXT: | [sizeof=8, align=4 38// CHECK-NEXT: | nvsize=4, nvalign=4] 39// CHECK-X64: *** Dumping AST Record Layout 40// CHECK-X64-NEXT: 0 | struct B 41// CHECK-X64-NEXT: 0 | (B vbtable pointer) 42// CHECK-X64-NEXT: 8 | struct B0 (virtual base) 43// CHECK-X64-NEXT: 8 | char a 44// CHECK-X64-NEXT: | [sizeof=16, align=8 45// CHECK-X64-NEXT: | nvsize=8, nvalign=8] 46 47struct C : virtual B0 { int a; C() : a(0xC) {} }; 48 49// CHECK: *** Dumping AST Record Layout 50// CHECK-NEXT: 0 | struct C 51// CHECK-NEXT: 0 | (C vbtable pointer) 52// CHECK-NEXT: 4 | int a 53// CHECK-NEXT: 8 | struct B0 (virtual base) 54// CHECK-NEXT: 8 | char a 55// CHECK-NEXT: | [sizeof=9, align=4 56// CHECK-NEXT: | nvsize=8, nvalign=4] 57// CHECK-X64: *** Dumping AST Record Layout 58// CHECK-X64-NEXT: 0 | struct C 59// CHECK-X64-NEXT: 0 | (C vbtable pointer) 60// CHECK-X64-NEXT: 8 | int a 61// CHECK-X64-NEXT: 16 | struct B0 (virtual base) 62// CHECK-X64-NEXT: 16 | char a 63// CHECK-X64-NEXT: | [sizeof=24, align=8 64// CHECK-X64-NEXT: | nvsize=16, nvalign=8] 65 66struct D : virtual B0 { __declspec(align(1)) int a; D() : a(0xD) {} }; 67 68// CHECK: *** Dumping AST Record Layout 69// CHECK-NEXT: 0 | struct D 70// CHECK-NEXT: 0 | (D vbtable pointer) 71// CHECK-NEXT: 4 | int a 72// CHECK-NEXT: 8 | struct B0 (virtual base) 73// CHECK-NEXT: 8 | char a 74// CHECK-NEXT: | [sizeof=12, align=4 75// CHECK-NEXT: | nvsize=8, nvalign=4] 76// CHECK-X64: *** Dumping AST Record Layout 77// CHECK-X64-NEXT: 0 | struct D 78// CHECK-X64-NEXT: 0 | (D vbtable pointer) 79// CHECK-X64-NEXT: 8 | int a 80// CHECK-X64-NEXT: 16 | struct B0 (virtual base) 81// CHECK-X64-NEXT: 16 | char a 82// CHECK-X64-NEXT: | [sizeof=24, align=8 83// CHECK-X64-NEXT: | nvsize=16, nvalign=8] 84 85struct E : virtual B0, virtual B1 {}; 86 87// CHECK: *** Dumping AST Record Layout 88// CHECK: *** Dumping AST Record Layout 89// CHECK-NEXT: 0 | struct E 90// CHECK-NEXT: 0 | (E vbtable pointer) 91// CHECK-NEXT: 4 | struct B0 (virtual base) 92// CHECK-NEXT: 4 | char a 93// CHECK-NEXT: 5 | struct B1 (virtual base) (empty) 94// CHECK-NEXT: | [sizeof=8, align=4 95// CHECK-NEXT: | nvsize=4, nvalign=4] 96// CHECK-X64: *** Dumping AST Record Layout 97// CHECK-X64: *** Dumping AST Record Layout 98// CHECK-X64-NEXT: 0 | struct E 99// CHECK-X64-NEXT: 0 | (E vbtable pointer) 100// CHECK-X64-NEXT: 8 | struct B0 (virtual base) 101// CHECK-X64-NEXT: 8 | char a 102// CHECK-X64-NEXT: 9 | struct B1 (virtual base) (empty) 103// CHECK-X64-NEXT: | [sizeof=16, align=8 104// CHECK-X64-NEXT: | nvsize=8, nvalign=8] 105 106struct F { char a; virtual ~F(); }; 107 108// CHECK: *** Dumping AST Record Layout 109// CHECK-NEXT: 0 | struct F 110// CHECK-NEXT: 0 | (F vftable pointer) 111// CHECK-NEXT: 4 | char a 112// CHECK-NEXT: | [sizeof=8, align=4 113// CHECK-NEXT: | nvsize=8, nvalign=4] 114// CHECK-X64: *** Dumping AST Record Layout 115// CHECK-X64-NEXT: 0 | struct F 116// CHECK-X64-NEXT: 0 | (F vftable pointer) 117// CHECK-X64-NEXT: 8 | char a 118// CHECK-X64-NEXT: | [sizeof=16, align=8 119// CHECK-X64-NEXT: | nvsize=16, nvalign=8] 120 121int a[ 122sizeof(A)+ 123sizeof(B)+ 124sizeof(C)+ 125sizeof(D)+ 126sizeof(E)+ 127sizeof(F)]; 128