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