113 lines · cpp
1// RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -fdump-record-layouts \2// RUN: -fsyntax-only %s | \3// RUN: FileCheck --check-prefixes=CHECK,CHECK32 %s4 5// RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -fdump-record-layouts \6// RUN: -fsyntax-only %s | \7// RUN: FileCheck --check-prefixes=CHECK,CHECK64 %s8 9namespace test1 {10struct A {11 double d1;12 virtual void boo() {}13};14 15struct B {16 double d2;17 A a;18};19 20struct C : public A {21 double d3;22};23 24int i = sizeof(B);25int j = sizeof(C);26 27// CHECK: *** Dumping AST Record Layout28// CHECK-NEXT: 0 | struct test1::A29// CHECK-NEXT: 0 | (A vtable pointer)30// CHECK32-NEXT: 4 | double d131// CHECK32-NEXT: | [sizeof=12, dsize=12, align=4, preferredalign=4,32// CHECK32-NEXT: | nvsize=12, nvalign=4, preferrednvalign=4]33// CHECK64-NEXT: 8 | double d134// CHECK64-NEXT: | [sizeof=16, dsize=16, align=8, preferredalign=8,35// CHECK64-NEXT: | nvsize=16, nvalign=8, preferrednvalign=8]36 37// CHECK: *** Dumping AST Record Layout38// CHECK-NEXT: 0 | struct test1::B39// CHECK-NEXT: 0 | double d240// CHECK-NEXT: 8 | struct test1::A a41// CHECK-NEXT: 8 | (A vtable pointer)42// CHECK32-NEXT: 12 | double d143// CHECK32-NEXT: | [sizeof=24, dsize=20, align=4, preferredalign=8,44// CHECK32-NEXT: | nvsize=20, nvalign=4, preferrednvalign=8]45// CHECK64-NEXT: 16 | double d146// CHECK64-NEXT: | [sizeof=24, dsize=24, align=8, preferredalign=8,47// CHECK64-NEXT: | nvsize=24, nvalign=8, preferrednvalign=8]48 49// CHECK: *** Dumping AST Record Layout50// CHECK-NEXT: 0 | struct test1::C51// CHECK-NEXT: 0 | struct test1::A (primary base)52// CHECK-NEXT: 0 | (A vtable pointer)53// CHECK32-NEXT: 4 | double d154// CHECK32-NEXT: 12 | double d355// CHECK32-NEXT: | [sizeof=20, dsize=20, align=4, preferredalign=4,56// CHECK32-NEXT: | nvsize=20, nvalign=4, preferrednvalign=4]57// CHECK64-NEXT: 8 | double d158// CHECK64-NEXT: 16 | double d359// CHECK64-NEXT: | [sizeof=24, dsize=24, align=8, preferredalign=8,60// CHECK64-NEXT: | nvsize=24, nvalign=8, preferrednvalign=8]61 62} // namespace test163 64namespace test2 {65struct A {66 long long l1;67};68 69struct B : public virtual A {70 double d2;71};72 73#pragma pack(2)74struct C : public virtual A {75 double __attribute__((aligned(4))) d3;76};77 78int i = sizeof(B);79int j = sizeof(C);80 81// CHECK: *** Dumping AST Record Layout82// CHECK-NEXT: 0 | struct test2::A83// CHECK-NEXT: 0 | long long l184// CHECK-NEXT: | [sizeof=8, dsize=8, align=8, preferredalign=8,85// CHECK-NEXT: | nvsize=8, nvalign=8, preferrednvalign=8]86 87// CHECK: *** Dumping AST Record Layout88// CHECK-NEXT: 0 | struct test2::B89// CHECK-NEXT: 0 | (B vtable pointer)90// CHECK32-NEXT: 4 | double d291// CHECK64-NEXT: 8 | double d292// CHECK-NEXT: 16 | struct test2::A (virtual base)93// CHECK-NEXT: 16 | long long l194// CHECK-NEXT: | [sizeof=24, dsize=24, align=8, preferredalign=8,95// CHECK32-NEXT: | nvsize=12, nvalign=4, preferrednvalign=4]96// CHECK64-NEXT: | nvsize=16, nvalign=8, preferrednvalign=8]97 98// CHECK: *** Dumping AST Record Layout99// CHECK-NEXT: 0 | struct test2::C100// CHECK-NEXT: 0 | (C vtable pointer)101// CHECK32-NEXT: 4 | double d3102// CHECK32-NEXT: 12 | struct test2::A (virtual base)103// CHECK32-NEXT: 12 | long long l1104// CHECK32-NEXT: | [sizeof=20, dsize=20, align=2, preferredalign=2,105// CHECK32-NEXT: | nvsize=12, nvalign=2, preferrednvalign=2]106// CHECK64-NEXT: 8 | double d3107// CHECK64-NEXT: 16 | struct test2::A (virtual base)108// CHECK64-NEXT: 16 | long long l1109// CHECK64-NEXT: | [sizeof=24, dsize=24, align=2, preferredalign=2,110// CHECK64-NEXT: | nvsize=16, nvalign=2, preferrednvalign=2]111 112} // namespace test2113