114 lines · c
1// RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -fdump-record-layouts \2// RUN: -fsyntax-only -fxl-pragma-pack -x c %s | \3// RUN: FileCheck --check-prefixes=CHECK,32BIT %s4 5// RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -fdump-record-layouts \6// RUN: -fsyntax-only -fxl-pragma-pack -x c++ %s | \7// RUN: FileCheck --check-prefixes=CHECK,32BIT %s8 9// RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -fdump-record-layouts \10// RUN: -fsyntax-only -fxl-pragma-pack -x c %s | \11// RUN: FileCheck --check-prefixes=CHECK,64BIT %s12 13// RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -fdump-record-layouts \14// RUN: -fsyntax-only -fxl-pragma-pack -x c++ %s | \15// RUN: FileCheck --check-prefixes=CHECK,64BIT %s16 17struct A {18 int a1 : 30;19 int a2 : 30;20 int a3 : 4;21};22 23int a = sizeof(struct A);24 25// CHECK: *** Dumping AST Record Layout26// CHECK-NEXT: 0 | struct A27// CHECK-NEXT: 0:0-29 | int a128// CHECK-NEXT: 4:0-29 | int a229// CHECK-NEXT: 8:0-3 | int a330// CHECK-NEXT: sizeof=12, {{(dsize=12, )?}}align=4, preferredalign=431 32#pragma align(packed)33struct AlignPacked {34 int a1 : 30;35 int a2 : 30;36 int a3 : 4;37};38#pragma align(reset)39 40int b = sizeof(struct AlignPacked);41 42// CHECK: *** Dumping AST Record Layout43// CHECK-NEXT: 0 | struct AlignPacked44// CHECK-NEXT: 0:0-29 | int a145// CHECK-NEXT: 3:6-35 | int a246// CHECK-NEXT: 7:4-7 | int a347// CHECK-NEXT: sizeof=8, {{(dsize=8, )?}}align=1, preferredalign=148 49#pragma pack(1)50struct Pack1 {51 int a1 : 30;52 int a2 : 30;53 int a3 : 4;54};55#pragma pack(pop)56 57int c = sizeof(struct Pack1);58 59// CHECK: *** Dumping AST Record Layout60// CHECK-NEXT: 0 | struct Pack161// CHECK-NEXT: 0:0-29 | int a162// CHECK-NEXT: 3:6-35 | int a263// CHECK-NEXT: 7:4-7 | int a364// CHECK-NEXT: sizeof=8, {{(dsize=8, )?}}align=1, preferredalign=165 66#pragma pack(2)67struct Pack2 {68 int a1 : 30;69 int a2 : 30;70 int a3 : 4;71};72#pragma pack(pop)73 74int d = sizeof(struct Pack2);75 76// CHECK: *** Dumping AST Record Layout77// CHECK-NEXT: 0 | struct Pack278// CHECK-NEXT: 0:0-29 | int a179// CHECK-NEXT: 3:6-35 | int a280// CHECK-NEXT: 7:4-7 | int a381// CHECK-NEXT: sizeof=8, {{(dsize=8, )?}}align=2, preferredalign=282//83struct __attribute__((packed)) PackedAttr {84 char f1;85 int : 0;86 short : 3;87 char f4 : 2;88};89 90int e = sizeof(struct PackedAttr);91// CHECK: *** Dumping AST Record Layout92// CHECK-NEXT: 0 | struct PackedAttr93// CHECK-NEXT: 0 | char f194// CHECK-NEXT: 4:- | int95// CHECK-NEXT: 4:0-2 | short96// CHECK-NEXT: 4:3-4 | char f497// CHECK-NEXT: sizeof=5, {{(dsize=5, )?}}align=1, preferredalign=198 99#pragma pack(2)100struct __attribute__((packed)) PackedAttrAndPragma {101 char f1;102 long long : 0;103};104#pragma pack(pop)105 106int f = sizeof(struct PackedAttrAndPragma);107// CHECK: *** Dumping AST Record Layout108// CHECK-NEXT: 0 | struct PackedAttrAndPragma109// CHECK-NEXT: 0 | char f1110// 32BIT-NEXT: 4:- | long long111// 32BIT-NEXT: sizeof=4, {{(dsize=4, )?}}align=1, preferredalign=1112// 64BIT-NEXT: 8:- | long long113// 64BIT-NEXT: sizeof=8, {{(dsize=8, )?}}align=1, preferredalign=1114