147 lines · cpp
1// RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -fdump-record-layouts \2// RUN: -fxl-pragma-pack -fsyntax-only %s | \3// RUN: FileCheck %s4 5// RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -fdump-record-layouts \6// RUN: -fxl-pragma-pack -fsyntax-only %s | \7// RUN: FileCheck %s8 9namespace test1 {10#pragma align(natural)11struct A {12 int i1;13};14 15struct B {16 double d1;17};18#pragma align(reset)19 20struct C : A, B {21 double d2;22};23 24int a = sizeof(C);25 26// CHECK: *** Dumping AST Record Layout27// CHECK-NEXT: 0 | struct test1::A28// CHECK-NEXT: 0 | int i129// CHECK-NEXT: | [sizeof=4, dsize=4, align=4, preferredalign=4,30// CHECK-NEXT: | nvsize=4, nvalign=4, preferrednvalign=4]31 32// CHECK: *** Dumping AST Record Layout33// CHECK-NEXT: 0 | struct test1::B34// CHECK-NEXT: 0 | double d135// CHECK-NEXT: | [sizeof=8, dsize=8, align=4, preferredalign=8,36// CHECK-NEXT: | nvsize=8, nvalign=4, preferrednvalign=8]37 38// CHECK: *** Dumping AST Record Layout39// CHECK-NEXT: 0 | struct test1::C40// CHECK-NEXT: 0 | struct test1::A (base)41// CHECK-NEXT: 0 | int i142// CHECK-NEXT: 4 | struct test1::B (base)43// CHECK-NEXT: 4 | double d144// CHECK-NEXT: 12 | double d245// CHECK-NEXT: | [sizeof=20, dsize=20, align=4, preferredalign=4,46// CHECK-NEXT: | nvsize=20, nvalign=4, preferrednvalign=4]47 48} // namespace test149 50namespace test2 {51struct A {52 int i1;53 double d;54};55 56#pragma align(natural)57struct B : A {58 int i2;59};60#pragma align(reset)61 62int b = sizeof(B);63 64// CHECK: *** Dumping AST Record Layout65// CHECK-NEXT: 0 | struct test2::A66// CHECK-NEXT: 0 | int i167// CHECK-NEXT: 4 | double d68// CHECK-NEXT: | [sizeof=12, dsize=12, align=4, preferredalign=4,69// CHECK-NEXT: | nvsize=12, nvalign=4, preferrednvalign=4]70 71// CHECK: *** Dumping AST Record Layout72// CHECK-NEXT: 0 | struct test2::B73// CHECK-NEXT: 0 | struct test2::A (base)74// CHECK-NEXT: 0 | int i175// CHECK-NEXT: 4 | double d76// CHECK-NEXT: 12 | int i277// CHECK-NEXT: | [sizeof=16, dsize=16, align=4, preferredalign=4,78// CHECK-NEXT: | nvsize=16, nvalign=4, preferrednvalign=4]79 80} // namespace test281 82namespace test3 {83#pragma align(natural)84struct A {85 int i1;86 double d;87};88#pragma align(reset)89 90struct B {91 struct A a;92 int i2;93};94 95int c = sizeof(B);96 97// CHECK: *** Dumping AST Record Layout98// CHECK-NEXT: 0 | struct test3::A99// CHECK-NEXT: 0 | int i1100// CHECK-NEXT: 8 | double d101// CHECK-NEXT: | [sizeof=16, dsize=16, align=4, preferredalign=8,102// CHECK-NEXT: | nvsize=16, nvalign=4, preferrednvalign=8]103 104// CHECK: *** Dumping AST Record Layout105// CHECK-NEXT: 0 | struct test3::B106// CHECK-NEXT: 0 | struct test3::A a107// CHECK-NEXT: 0 | int i1108// CHECK-NEXT: 8 | double d109// CHECK-NEXT: 16 | int i2110// CHECK-NEXT: | [sizeof=24, dsize=24, align=4, preferredalign=8,111// CHECK-NEXT: | nvsize=24, nvalign=4, preferrednvalign=8]112 113} // namespace test3114 115namespace test4 {116struct A {117 int i1;118 double d;119};120 121#pragma align(natural)122struct B {123 int i2;124 struct A a;125};126#pragma align(reset)127 128int d = sizeof(B);129 130// CHECK: *** Dumping AST Record Layout131// CHECK-NEXT: 0 | struct test4::A132// CHECK-NEXT: 0 | int i1133// CHECK-NEXT: 4 | double d134// CHECK-NEXT: | [sizeof=12, dsize=12, align=4, preferredalign=4,135// CHECK-NEXT: | nvsize=12, nvalign=4, preferrednvalign=4]136 137// CHECK: *** Dumping AST Record Layout138// CHECK-NEXT: 0 | struct test4::B139// CHECK-NEXT: 0 | int i2140// CHECK-NEXT: 4 | struct test4::A a141// CHECK-NEXT: 4 | int i1142// CHECK-NEXT: 8 | double d143// CHECK-NEXT: | [sizeof=16, dsize=16, align=4, preferredalign=4,144// CHECK-NEXT: | nvsize=16, nvalign=4, preferrednvalign=4]145 146} // namespace test4147