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