1 // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only -cxx-abi microsoft %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 -cxx-abi microsoft %s 2>/dev/null \ 4 // RUN: | FileCheck %s -check-prefix CHECK-X64 5 6 struct B0 { }; 7 8 struct A : virtual B0 { char a : 1; }; 9 10 // CHECK: *** Dumping AST Record Layout 11 // CHECK: 0 | struct A 12 // CHECK: 0 | (A vbtable pointer) 13 // CHECK: 4 | char a 14 // CHECK: 9 | struct B0 (virtual base) (empty) 15 // CHECK: | [sizeof=9, align=4 16 // CHECK: | nvsize=8, nvalign=4] 17 // CHECK-X64: *** Dumping AST Record Layout 18 // CHECK-X64: 0 | struct A 19 // CHECK-X64: 0 | (A vbtable pointer) 20 // CHECK-X64: 8 | char a 21 // CHECK-X64: 17 | struct B0 (virtual base) (empty) 22 // CHECK-X64: | [sizeof=24, align=8 23 // CHECK-X64: | nvsize=16, nvalign=8] 24 25 struct B : virtual B0 { short a : 1; }; 26 27 // CHECK: *** Dumping AST Record Layout 28 // CHECK: 0 | struct B 29 // CHECK: 0 | (B vbtable pointer) 30 // CHECK: 4 | short a 31 // CHECK: 10 | struct B0 (virtual base) (empty) 32 // CHECK: | [sizeof=10, align=4 33 // CHECK: | nvsize=8, nvalign=4] 34 // CHECK-X64: *** Dumping AST Record Layout 35 // CHECK-X64: 0 | struct B 36 // CHECK-X64: 0 | (B vbtable pointer) 37 // CHECK-X64: 8 | short a 38 // CHECK-X64: 18 | struct B0 (virtual base) (empty) 39 // CHECK-X64: | [sizeof=24, align=8 40 // CHECK-X64: | nvsize=16, nvalign=8] 41 42 struct C : virtual B0 { char a : 1; char : 0; }; 43 44 // CHECK: *** Dumping AST Record Layout 45 // CHECK: 0 | struct C 46 // CHECK: 0 | (C vbtable pointer) 47 // CHECK: 4 | char a 48 // CHECK: 5 | char 49 // CHECK: 8 | struct B0 (virtual base) (empty) 50 // CHECK: | [sizeof=8, align=4 51 // CHECK: | nvsize=8, nvalign=4] 52 // CHECK-X64: *** Dumping AST Record Layout 53 // CHECK-X64: 0 | struct C 54 // CHECK-X64: 0 | (C vbtable pointer) 55 // CHECK-X64: 8 | char a 56 // CHECK-X64: 9 | char 57 // CHECK-X64: 16 | struct B0 (virtual base) (empty) 58 // CHECK-X64: | [sizeof=16, align=8 59 // CHECK-X64: | nvsize=16, nvalign=8] 60 61 struct D : virtual B0 { char a : 1; char b; }; 62 63 // CHECK: *** Dumping AST Record Layout 64 // CHECK: 0 | struct D 65 // CHECK: 0 | (D vbtable pointer) 66 // CHECK: 4 | char a 67 // CHECK: 5 | char b 68 // CHECK: 8 | struct B0 (virtual base) (empty) 69 // CHECK: | [sizeof=8, align=4 70 // CHECK: | nvsize=8, nvalign=4] 71 // CHECK-X64: *** Dumping AST Record Layout 72 // CHECK-X64: 0 | struct D 73 // CHECK-X64: 0 | (D vbtable pointer) 74 // CHECK-X64: 8 | char a 75 // CHECK-X64: 9 | char b 76 // CHECK-X64: 16 | struct B0 (virtual base) (empty) 77 // CHECK-X64: | [sizeof=16, align=8 78 // CHECK-X64: | nvsize=16, nvalign=8] 79 80 int a[ 81 sizeof(A)+ 82 sizeof(B)+ 83 sizeof(C)+ 84 sizeof(D)]; 85