blob: 8c1a0d4cfdb30c8366bc3885548be8c943e11c7b [file] [log] [blame]
Douglas Katzman3459ce22015-10-08 04:24:12 +00001// RUN: %clang_cc1 -x c -debug-info-kind=limited -emit-llvm -triple x86_64-apple-darwin -o - %s | FileCheck %s
Adrian Prantl9935f4f2015-06-26 21:25:18 +00002
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",
David Majnemerb4b671e2016-06-30 03:01:59 +000024// CHECK-SAME: {{.*}}size: 1, align: 32, offset: 128, flags: DIFlagBitField, extraData: i64 128)
Adrian Prantl9935f4f2015-06-26 21:25:18 +000025
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",
David Majnemerb4b671e2016-06-30 03:01:59 +000043// CHECK-SAME: {{.*}}size: 1, align: 32, offset: 72, flags: DIFlagBitField, extraData: i64 72)
Adrian Prantl9935f4f2015-06-26 21:25:18 +000044
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",
David Majnemerb4b671e2016-06-30 03:01:59 +000064// CHECK-SAME: {{.*}}size: 1, align: 32, offset: 72, flags: DIFlagBitField, extraData: i64 72)
Adrian Prantl9935f4f2015-06-26 21:25:18 +000065
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",
David Majnemerb4b671e2016-06-30 03:01:59 +000086// CHECK-SAME: {{.*}}size: 1, align: 32, offset: 96, flags: DIFlagBitField, extraData: i64 96)
Adrian Prantl9935f4f2015-06-26 21:25:18 +000087
88struct layout0 l0;
89struct layout1 l1;
90struct layout2 l2;
91struct layout3 l3;