1// RUN: %clang_cc1 -x c -debug-info-kind=limited -emit-llvm -triple x86_64-apple-darwin -o - %s | FileCheck %s 2 3// CHECK: %struct.layout0 = type { i8, %struct.size8, i8 } 4// CHECK: %struct.layout1 = type <{ i8, %struct.size8_anon, i8, [2 x i8] }> 5// CHECK: %struct.layout2 = type <{ i8, %struct.size8_pack1, i8 }> 6// CHECK: %struct.layout3 = type <{ i8, [3 x i8], %struct.size8_pack4, i8, [3 x 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_ofs0 21// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs8", 22// CHECK-SAME: {{.*}}size: 64, align: 64, offset: 64) 23// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16", 24// CHECK-SAME: {{.*}}size: 1, align: 32, 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_ofs0 40// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs1", 41// CHECK-SAME: {{.*}}size: 64, align: 8, offset: 8) 42// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9", 43// CHECK-SAME: {{.*}}size: 1, align: 32, 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_ofs0 61// 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, align: 32, 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_ofs0 83// 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, align: 32, offset: 96, flags: DIFlagBitField, extraData: i64 96) 87 88struct layout0 l0; 89struct layout1 l1; 90struct layout2 l2; 91struct layout3 l3; 92