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