121 lines · cpp
1// RUN: %clang_cc1 -fno-rtti -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>&1 \2// RUN: | FileCheck %s3// RUN: %clang_cc1 -fno-rtti -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \4// RUN: | FileCheck %s -check-prefix CHECK-X645 6struct B0 { int a; };7struct B1 { int a; };8 9struct A : virtual B0 { char a : 1; };10 11// CHECK: *** Dumping AST Record Layout12// CHECK: *** Dumping AST Record Layout13// CHECK-NEXT: 0 | struct A14// CHECK-NEXT: 0 | (A vbtable pointer)15// CHECK-NEXT: 4:0-0 | char a16// CHECK-NEXT: 8 | struct B0 (virtual base)17// CHECK-NEXT: 8 | int a18// CHECK-NEXT: | [sizeof=12, align=419// CHECK-NEXT: | nvsize=8, nvalign=4]20// CHECK-X64: *** Dumping AST Record Layout21// CHECK-X64: *** Dumping AST Record Layout22// CHECK-X64-NEXT: 0 | struct A23// CHECK-X64-NEXT: 0 | (A vbtable pointer)24// CHECK-X64-NEXT: 8:0-0 | char a25// CHECK-X64-NEXT: 16 | struct B0 (virtual base)26// CHECK-X64-NEXT: 16 | int a27// CHECK-X64-NEXT: | [sizeof=24, align=828// CHECK-X64-NEXT: | nvsize=16, nvalign=8]29 30struct B : virtual B0 { short a : 1; };31 32// CHECK: *** Dumping AST Record Layout33// CHECK-NEXT: 0 | struct B34// CHECK-NEXT: 0 | (B vbtable pointer)35// CHECK-NEXT: 4:0-0 | short a36// CHECK-NEXT: 8 | struct B0 (virtual base)37// CHECK-NEXT: 8 | int a38// CHECK-NEXT: | [sizeof=12, align=439// CHECK-NEXT: | nvsize=8, nvalign=4]40// CHECK-X64: *** Dumping AST Record Layout41// CHECK-X64-NEXT: 0 | struct B42// CHECK-X64-NEXT: 0 | (B vbtable pointer)43// CHECK-X64-NEXT: 8:0-0 | short a44// CHECK-X64-NEXT: 16 | struct B0 (virtual base)45// CHECK-X64-NEXT: 16 | int a46// CHECK-X64-NEXT: | [sizeof=24, align=847// CHECK-X64-NEXT: | nvsize=16, nvalign=8]48 49struct C : virtual B0 { char a : 1; char : 0; };50 51// CHECK: *** Dumping AST Record Layout52// CHECK-NEXT: 0 | struct C53// CHECK-NEXT: 0 | (C vbtable pointer)54// CHECK-NEXT: 4:0-0 | char a55// CHECK-NEXT: 5:- | char56// CHECK-NEXT: 8 | struct B0 (virtual base)57// CHECK-NEXT: 8 | int a58// CHECK-NEXT: | [sizeof=12, align=459// CHECK-NEXT: | nvsize=8, nvalign=4]60// CHECK-X64: *** Dumping AST Record Layout61// CHECK-X64-NEXT: 0 | struct C62// CHECK-X64-NEXT: 0 | (C vbtable pointer)63// CHECK-X64-NEXT: 8:0-0 | char a64// CHECK-X64-NEXT: 9:- | char65// CHECK-X64-NEXT: 16 | struct B0 (virtual base)66// CHECK-X64-NEXT: 16 | int a67// CHECK-X64-NEXT: | [sizeof=24, align=868// CHECK-X64-NEXT: | nvsize=16, nvalign=8]69 70struct D : virtual B0 { char a : 1; char b; };71 72// CHECK: *** Dumping AST Record Layout73// CHECK-NEXT: 0 | struct D74// CHECK-NEXT: 0 | (D vbtable pointer)75// CHECK-NEXT: 4:0-0 | char a76// CHECK-NEXT: 5 | char b77// CHECK-NEXT: 8 | struct B0 (virtual base)78// CHECK-NEXT: 8 | int a79// CHECK-NEXT: | [sizeof=12, align=480// CHECK-NEXT: | nvsize=8, nvalign=4]81// CHECK-X64: *** Dumping AST Record Layout82// CHECK-X64-NEXT: 0 | struct D83// CHECK-X64-NEXT: 0 | (D vbtable pointer)84// CHECK-X64-NEXT: 8:0-0 | char a85// CHECK-X64-NEXT: 9 | char b86// CHECK-X64-NEXT: 16 | struct B0 (virtual base)87// CHECK-X64-NEXT: 16 | int a88// CHECK-X64-NEXT: | [sizeof=24, align=889// CHECK-X64-NEXT: | nvsize=16, nvalign=8]90 91struct E : virtual B0, virtual B1 { long long : 1; };92// CHECK: *** Dumping AST Record Layout93// CHECK: *** Dumping AST Record Layout94// CHECK-NEXT: 0 | struct E95// CHECK-NEXT: 0 | (E vbtable pointer)96// CHECK-NEXT: 8:0-0 | long long97// CHECK-NEXT: 16 | struct B0 (virtual base)98// CHECK-NEXT: 16 | int a99// CHECK-NEXT: 20 | struct B1 (virtual base)100// CHECK-NEXT: 20 | int a101// CHECK-NEXT: | [sizeof=24, align=8102// CHECK-NEXT: | nvsize=16, nvalign=8]103// CHECK-X64: *** Dumping AST Record Layout104// CHECK-X64: *** Dumping AST Record Layout105// CHECK-X64-NEXT: 0 | struct E106// CHECK-X64-NEXT: 0 | (E vbtable pointer)107// CHECK-X64-NEXT: 8:0-0 | long long108// CHECK-X64-NEXT: 16 | struct B0 (virtual base)109// CHECK-X64-NEXT: 16 | int a110// CHECK-X64-NEXT: 20 | struct B1 (virtual base)111// CHECK-X64-NEXT: 20 | int a112// CHECK-X64-NEXT: | [sizeof=24, align=8113// CHECK-X64-NEXT: | nvsize=16, nvalign=8]114 115int a[116sizeof(A)+117sizeof(B)+118sizeof(C)+119sizeof(D)+120sizeof(E)];121