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