brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · a01eb14 Raw
230 lines · c
1// RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -fdump-record-layouts \2// RUN:     -fxl-pragma-pack -verify -fsyntax-only -x c++ %s | \3// RUN:   FileCheck %s4 5// RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -fdump-record-layouts \6// RUN:     -fxl-pragma-pack -verify -fsyntax-only -x c++ %s | \7// RUN:   FileCheck %s8 9namespace test1 {10#pragma align(natural)11#pragma pack(4)12#pragma pack(2)13struct A {14  int i;15  double d;16};17 18int a = sizeof(A);19#pragma pack()20#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 4}}21#pragma pack(pop)22#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}}23struct B {24  int i;25  double d;26};27#pragma align(reset)28 29int b = sizeof(B);30 31// CHECK:      *** Dumping AST Record Layout32// CHECK-NEXT:          0 | struct test1::A33// CHECK-NEXT:          0 |   int i34// CHECK-NEXT:          4 |   double d35// CHECK-NEXT:            | [sizeof=12, dsize=12, align=2, preferredalign=2,36// CHECK-NEXT:            |  nvsize=12, nvalign=2, preferrednvalign=2]37 38// CHECK:      *** Dumping AST Record Layout39// CHECK-NEXT:          0 | struct test1::B40// CHECK-NEXT:          0 |   int i41// CHECK-NEXT:          8 |   double d42// CHECK-NEXT:            | [sizeof=16, dsize=16, align=4, preferredalign=8,43// CHECK-NEXT:            |  nvsize=16, nvalign=4, preferrednvalign=8]44 45} // namespace test146 47namespace test2 {48#pragma align(natural)49#pragma pack(2)50struct A {51  int i;52  double d;53};54 55int a = sizeof(A);56#pragma align(reset)57 58struct B {59  int i;60  double d;61};62 63int b = sizeof(B);64 65// CHECK:      *** Dumping AST Record Layout66// CHECK-NEXT:          0 | struct test2::A67// CHECK-NEXT:          0 |   int i68// CHECK-NEXT:          4 |   double d69// CHECK-NEXT:            | [sizeof=12, dsize=12, align=2, preferredalign=2,70// CHECK-NEXT:            |  nvsize=12, nvalign=2, preferrednvalign=2]71 72// CHECK:      *** Dumping AST Record Layout73// CHECK-NEXT:          0 | struct test2::B74// CHECK-NEXT:          0 |   int i75// CHECK-NEXT:          4 |   double d76// CHECK-NEXT:            | [sizeof=12, dsize=12, align=4, preferredalign=4,77// CHECK-NEXT:            |  nvsize=12, nvalign=4, preferrednvalign=4]78 79} // namespace test280 81namespace test3 {82#pragma pack(2)83#pragma align(natural)84struct A {85  double d;86};87#pragma align(reset)88#pragma pack(pop)89 90int a = sizeof(A);91 92// CHECK:      *** Dumping AST Record Layout93// CHECK-NEXT:          0 | struct test3::A94// CHECK-NEXT:          0 |   double d95// CHECK-NEXT:            | [sizeof=8, dsize=8, align=4, preferredalign=8,96// CHECK-NEXT:            |  nvsize=8, nvalign=4, preferrednvalign=8]97 98} // namespace test399 100namespace test4 {101#pragma pack(2)102#pragma align(natural)103#pragma pack(pop)104 105struct A {106  int i;107  double d;108} a;109#pragma align(reset)110#pragma pack(pop)111 112int i = sizeof(A);113 114// CHECK:      *** Dumping AST Record Layout115// CHECK-NEXT:          0 | struct test4::A116// CHECK-NEXT:          0 |   int i117// CHECK-NEXT:          8 |   double d118// CHECK-NEXT:            | [sizeof=16, dsize=16, align=4, preferredalign=8,119// CHECK-NEXT:            |  nvsize=16, nvalign=4, preferrednvalign=8]120 121} // namespace test4122 123namespace test5 {124#pragma align(power)125#pragma align(natural)126#pragma pack(2)127#pragma align(reset)128struct A {129  int i;130  double d;131};132#pragma align(reset)133 134int a = sizeof(A);135 136// CHECK:      *** Dumping AST Record Layout137// CHECK-NEXT:          0 | struct test5::A138// CHECK-NEXT:          0 |   int i139// CHECK-NEXT:          4 |   double d140// CHECK-NEXT:            | [sizeof=12, dsize=12, align=4, preferredalign=4,141// CHECK-NEXT:            |  nvsize=12, nvalign=4, preferrednvalign=4]142 143} // namespace test5144 145namespace test6 {146#pragma align(natural)147#pragma pack(0)    // expected-error {{expected #pragma pack parameter to be '1', '2', '4', '8', or '16'}}148#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}}149 150struct A {151  int i;152  double d;153} a;154#pragma align(reset)155 156int i = sizeof(a);157 158// CHECK:      *** Dumping AST Record Layout159// CHECK-NEXT:          0 | struct test6::A160// CHECK-NEXT:          0 |   int i161// CHECK-NEXT:          8 |   double d162// CHECK-NEXT:            | [sizeof=16, dsize=16, align=4, preferredalign=8,163// CHECK-NEXT:            |  nvsize=16, nvalign=4, preferrednvalign=8]164 165} // namespace test6166 167namespace test7 {168#pragma align = natural // expected-warning {{missing '(' after '#pragma align' - ignoring}}169#pragma align(reset)    // expected-warning {{#pragma options align=reset failed: stack empty}}170} // namespace test7171 172namespace test8 {173#pragma align(packed)174#pragma pack(2)175#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 2}}176struct A {177  int i;178  double d;179};180#pragma align(reset)181 182int a = sizeof(A);183 184// CHECK:      *** Dumping AST Record Layout185// CHECK-NEXT:          0 | struct test8::A186// CHECK-NEXT:          0 |   int i187// CHECK-NEXT:          4 |   double d188// CHECK-NEXT:            | [sizeof=12, dsize=12, align=2, preferredalign=2,189// CHECK-NEXT:            |  nvsize=12, nvalign=2, preferrednvalign=2]190 191} // namespace test8192 193namespace test9 {194#pragma pack(push, r1, 2) // expected-error {{specifying an identifier within `#pragma pack` is not supported on this target}}195struct A {196  int i;197  double d;198};199#pragma pack(pop) // expected-warning {{#pragma pack(pop, ...) failed: stack empty}}200 201int a = sizeof(A);202 203// CHECK:      *** Dumping AST Record Layout204// CHECK-NEXT:          0 | struct test9::A205// CHECK-NEXT:          0 |   int i206// CHECK-NEXT:          4 |   double d207// CHECK-NEXT:            | [sizeof=12, dsize=12, align=4, preferredalign=4,208// CHECK-NEXT:            |  nvsize=12, nvalign=4, preferrednvalign=4]209 210} // namespace test9211 212namespace test10 {213#pragma pack(2)214#pragma align(reset)215struct A {216  int i;217  double d;218};219 220int a = sizeof(A);221 222// CHECK:      *** Dumping AST Record Layout223// CHECK-NEXT:          0 | struct test10::A224// CHECK-NEXT:          0 |   int i225// CHECK-NEXT:          4 |   double d226// CHECK-NEXT:            | [sizeof=12, dsize=12, align=4, preferredalign=4,227// CHECK-NEXT:            |  nvsize=12, nvalign=4, preferrednvalign=4]228 229} // namespace test10230