diff --git a/test/DebugInfo/X86/debug-info-packed-struct.ll b/test/DebugInfo/X86/debug-info-packed-struct.ll index 614c1608fc8..6829c2d1374 100644 --- a/test/DebugInfo/X86/debug-info-packed-struct.ll +++ b/test/DebugInfo/X86/debug-info-packed-struct.ll @@ -7,6 +7,19 @@ target triple = "x86_64-apple-darwin" ; RUN: llvm-dwarfdump -debug-dump=info %t.o | FileCheck %s ; REQUIRES: object-emission +; // --------------------------------------------------------------------- +; // Not packed. +; // --------------------------------------------------------------------- +; struct size8 { +; int i : 4; +; long long l : 60; +; }; +; struct layout0 { +; char l0_ofs0; +; struct size8 l0_ofs8; +; int l0_ofs16 : 1; +; } l0; + %struct.layout0 = type { i8, %struct.size8, i8 } %struct.size8 = type { i64 } ; CHECK: DW_TAG_structure_type @@ -24,6 +37,20 @@ target triple = "x86_64-apple-darwin" ; CHECK: DW_AT_bit_offset {{.*}} (0x1f) ; CHECK: DW_AT_data_member_location {{.*}}10 + +; // --------------------------------------------------------------------- +; // Implicitly packed. +; // --------------------------------------------------------------------- +; struct size8_anon { +; int : 4; +; long long : 60; +; }; +; struct layout1 { +; char l1_ofs0; +; struct size8_anon l1_ofs1; +; int l1_ofs9 : 1; +; } l1; + %struct.layout1 = type <{ i8, %struct.size8_anon, i8, [2 x i8] }> %struct.size8_anon = type { i64 } @@ -43,6 +70,21 @@ target triple = "x86_64-apple-darwin" ; CHECK: DW_AT_bit_offset {{.*}} (0x17) ; CHECK: DW_AT_data_member_location {{.*}}08 +; // --------------------------------------------------------------------- +; // Explicitly packed. +; // --------------------------------------------------------------------- +; #pragma pack(1) +; struct size8_pack1 { +; int i : 4; +; long long l : 60; +; }; +; struct layout2 { +; char l2_ofs0; +; struct size8_pack1 l2_ofs1; +; int l2_ofs9 : 1; +; } l2; +; #pragma pack() + %struct.layout2 = type <{ i8, %struct.size8_pack1, i8 }> %struct.size8_pack1 = type { i64 } @@ -62,6 +104,22 @@ target triple = "x86_64-apple-darwin" ; CHECK: DW_AT_bit_offset {{.*}} (0x17) ; CHECK: DW_AT_data_member_location {{.*}}08 +; // --------------------------------------------------------------------- +; // Explicitly packed with different alignment. +; // --------------------------------------------------------------------- +; #pragma pack(4) +; struct size8_pack4 { +; int i : 4; +; long long l : 60; +; }; +; struct layout3 { +; char l3_ofs0; +; struct size8_pack4 l3_ofs4; +; int l3_ofs12 : 1; +; } l 3; +; #pragma pack() + + %struct.layout3 = type <{ i8, [3 x i8], %struct.size8_pack4, i8, [3 x i8] }> %struct.size8_pack4 = type { i64 }