150
|
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.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 // ---------------------------------------------------------------------
|
|
11 struct size8 {
|
|
12 int i : 4;
|
|
13 long long l : 60;
|
|
14 };
|
|
15 struct 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, 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 // ---------------------------------------------------------------------
|
|
30 struct size8_anon {
|
|
31 int : 4;
|
|
32 long long : 60;
|
|
33 };
|
|
34 struct 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, 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)
|
|
50 struct size8_pack1 {
|
|
51 int i : 4;
|
|
52 long long l : 60;
|
|
53 };
|
|
54 struct 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, 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)
|
|
72 struct size8_pack4 {
|
|
73 int i : 4;
|
|
74 long long l : 60;
|
|
75 };
|
|
76 struct 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, 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
|
|
88 struct layout3 l3;
|
|
89 struct layout0 l0;
|
|
90 struct layout1 l1;
|
|
91 struct layout2 l2;
|