128 lines · cpp
1// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fms-extensions -fdump-record-layouts %s 2>/dev/null \2// RUN: | FileCheck %s3// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fms-extensions -fdump-record-layouts %s 2>/dev/null \4// RUN: | FileCheck %s -check-prefix CHECK-X645 6extern "C" int printf(const char *fmt, ...);7 8struct B0 { char a; B0() : a(0xB0) {} };9struct __declspec(align(1)) B1 {};10 11struct A : virtual B0 {};12 13// CHECK: *** Dumping AST Record Layout14// CHECK: *** Dumping AST Record Layout15// CHECK-NEXT: 0 | struct A16// CHECK-NEXT: 0 | (A vbtable pointer)17// CHECK-NEXT: 4 | struct B0 (virtual base)18// CHECK-NEXT: 4 | char a19// CHECK-NEXT: | [sizeof=5, align=420// CHECK-NEXT: | nvsize=4, nvalign=4]21// CHECK-X64: *** Dumping AST Record Layout22// CHECK-X64: *** Dumping AST Record Layout23// CHECK-X64-NEXT: 0 | struct A24// CHECK-X64-NEXT: 0 | (A vbtable pointer)25// CHECK-X64-NEXT: 8 | struct B0 (virtual base)26// CHECK-X64-NEXT: 8 | char a27// CHECK-X64-NEXT: | [sizeof=16, align=828// CHECK-X64-NEXT: | nvsize=8, nvalign=8]29 30struct __declspec(align(1)) B : virtual B0 {};31 32// CHECK: *** Dumping AST Record Layout33// CHECK-NEXT: 0 | struct B34// CHECK-NEXT: 0 | (B vbtable pointer)35// CHECK-NEXT: 4 | struct B0 (virtual base)36// CHECK-NEXT: 4 | char a37// CHECK-NEXT: | [sizeof=8, align=438// CHECK-NEXT: | nvsize=4, nvalign=4]39// CHECK-X64: *** Dumping AST Record Layout40// CHECK-X64-NEXT: 0 | struct B41// CHECK-X64-NEXT: 0 | (B vbtable pointer)42// CHECK-X64-NEXT: 8 | struct B0 (virtual base)43// CHECK-X64-NEXT: 8 | char a44// CHECK-X64-NEXT: | [sizeof=16, align=845// CHECK-X64-NEXT: | nvsize=8, nvalign=8]46 47struct C : virtual B0 { int a; C() : a(0xC) {} };48 49// CHECK: *** Dumping AST Record Layout50// CHECK-NEXT: 0 | struct C51// CHECK-NEXT: 0 | (C vbtable pointer)52// CHECK-NEXT: 4 | int a53// CHECK-NEXT: 8 | struct B0 (virtual base)54// CHECK-NEXT: 8 | char a55// CHECK-NEXT: | [sizeof=9, align=456// CHECK-NEXT: | nvsize=8, nvalign=4]57// CHECK-X64: *** Dumping AST Record Layout58// CHECK-X64-NEXT: 0 | struct C59// CHECK-X64-NEXT: 0 | (C vbtable pointer)60// CHECK-X64-NEXT: 8 | int a61// CHECK-X64-NEXT: 16 | struct B0 (virtual base)62// CHECK-X64-NEXT: 16 | char a63// CHECK-X64-NEXT: | [sizeof=24, align=864// CHECK-X64-NEXT: | nvsize=16, nvalign=8]65 66struct D : virtual B0 { __declspec(align(1)) int a; D() : a(0xD) {} };67 68// CHECK: *** Dumping AST Record Layout69// CHECK-NEXT: 0 | struct D70// CHECK-NEXT: 0 | (D vbtable pointer)71// CHECK-NEXT: 4 | int a72// CHECK-NEXT: 8 | struct B0 (virtual base)73// CHECK-NEXT: 8 | char a74// CHECK-NEXT: | [sizeof=12, align=475// CHECK-NEXT: | nvsize=8, nvalign=4]76// CHECK-X64: *** Dumping AST Record Layout77// CHECK-X64-NEXT: 0 | struct D78// CHECK-X64-NEXT: 0 | (D vbtable pointer)79// CHECK-X64-NEXT: 8 | int a80// CHECK-X64-NEXT: 16 | struct B0 (virtual base)81// CHECK-X64-NEXT: 16 | char a82// CHECK-X64-NEXT: | [sizeof=24, align=883// CHECK-X64-NEXT: | nvsize=16, nvalign=8]84 85struct E : virtual B0, virtual B1 {};86 87// CHECK: *** Dumping AST Record Layout88// CHECK: *** Dumping AST Record Layout89// CHECK-NEXT: 0 | struct E90// CHECK-NEXT: 0 | (E vbtable pointer)91// CHECK-NEXT: 4 | struct B0 (virtual base)92// CHECK-NEXT: 4 | char a93// CHECK-NEXT: 5 | struct B1 (virtual base) (empty)94// CHECK-NEXT: | [sizeof=8, align=495// CHECK-NEXT: | nvsize=4, nvalign=4]96// CHECK-X64: *** Dumping AST Record Layout97// CHECK-X64: *** Dumping AST Record Layout98// CHECK-X64-NEXT: 0 | struct E99// CHECK-X64-NEXT: 0 | (E vbtable pointer)100// CHECK-X64-NEXT: 8 | struct B0 (virtual base)101// CHECK-X64-NEXT: 8 | char a102// CHECK-X64-NEXT: 9 | struct B1 (virtual base) (empty)103// CHECK-X64-NEXT: | [sizeof=16, align=8104// CHECK-X64-NEXT: | nvsize=8, nvalign=8]105 106struct F { char a; virtual ~F(); };107 108// CHECK: *** Dumping AST Record Layout109// CHECK-NEXT: 0 | struct F110// CHECK-NEXT: 0 | (F vftable pointer)111// CHECK-NEXT: 4 | char a112// CHECK-NEXT: | [sizeof=8, align=4113// CHECK-NEXT: | nvsize=8, nvalign=4]114// CHECK-X64: *** Dumping AST Record Layout115// CHECK-X64-NEXT: 0 | struct F116// CHECK-X64-NEXT: 0 | (F vftable pointer)117// CHECK-X64-NEXT: 8 | char a118// CHECK-X64-NEXT: | [sizeof=16, align=8119// CHECK-X64-NEXT: | nvsize=16, nvalign=8]120 121int a[122sizeof(A)+123sizeof(B)+124sizeof(C)+125sizeof(D)+126sizeof(E)+127sizeof(F)];128