92 lines · c
1// RUN: %clang_cc1 -x c -debug-info-kind=limited -emit-llvm -triple x86_64-apple-darwin -o - %s | FileCheck %s2 3// CHECK: %struct.layout3 = type <{ i8, [3 x i8], %struct.size8_pack4, i8, [3 x i8] }>4// CHECK: %struct.layout0 = type { i8, %struct.size8, i8 }5// CHECK: %struct.layout1 = type <{ i8, %struct.size8_anon, i8, [2 x i8] }>6// CHECK: %struct.layout2 = type <{ i8, %struct.size8_pack1, i8 }>7 8// ---------------------------------------------------------------------9// Not packed.10// ---------------------------------------------------------------------11struct size8 {12 int i : 4;13 long long l : 60;14};15struct layout0 {16 char l0_ofs0;17 struct size8 l0_ofs8;18 int l0_ofs16 : 1;19};20// CHECK: l0_ofs021// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs8",22// CHECK-SAME: {{.*}}size: 64, offset: 64)23// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16",24// CHECK-SAME: {{.*}}size: 1, offset: 128, flags: DIFlagBitField, extraData: i64 128)25 26 27// ---------------------------------------------------------------------28// Implicitly packed.29// ---------------------------------------------------------------------30struct size8_anon {31 int : 4;32 long long : 60;33};34struct layout1 {35 char l1_ofs0;36 struct size8_anon l1_ofs1;37 int l1_ofs9 : 1;38};39// CHECK: l1_ofs040// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs1",41// CHECK-SAME: {{.*}}size: 64, offset: 8)42// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9",43// CHECK-SAME: {{.*}}size: 1, offset: 72, flags: DIFlagBitField, extraData: i64 72)44 45 46// ---------------------------------------------------------------------47// Explicitly packed.48// ---------------------------------------------------------------------49#pragma pack(1)50struct size8_pack1 {51 int i : 4;52 long long l : 60;53};54struct layout2 {55 char l2_ofs0;56 struct size8_pack1 l2_ofs1;57 int l2_ofs9 : 1;58};59#pragma pack()60// CHECK: l2_ofs061// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs1",62// CHECK-SAME: {{.*}}size: 64, align: 8, offset: 8)63// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9",64// CHECK-SAME: {{.*}}size: 1, offset: 72, flags: DIFlagBitField, extraData: i64 72)65 66 67 68// ---------------------------------------------------------------------69// Explicitly packed with different alignment.70// ---------------------------------------------------------------------71#pragma pack(4)72struct size8_pack4 {73 int i : 4;74 long long l : 60;75};76struct layout3 {77 char l3_ofs0;78 struct size8_pack4 l3_ofs4;79 int l3_ofs12 : 1;80};81#pragma pack()82// CHECK: l3_ofs083// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs4",84// CHECK-SAME: {{.*}}size: 64, align: 32, offset: 32)85// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs12",86// CHECK-SAME: {{.*}}size: 1, offset: 96, flags: DIFlagBitField, extraData: i64 96)87 88struct layout3 l3;89struct layout0 l0;90struct layout1 l1;91struct layout2 l2;92