blob: 6441a740e3799f32b66bbb6804201894d25a4ab7 [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
Peter Collingbourneeeb56ab2016-09-13 01:13:19 +00003// CHECK: %struct.layout3 = type <{ i8, [3 x i8], %struct.size8_pack4, i8, [3 x i8] }>
Adrian Prantl9935f4f2015-06-26 21:25:18 +00004// 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 }>
Adrian Prantl9935f4f2015-06-26 21:25:18 +00007
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",
Victor Leschuka7ece032016-10-20 00:13:19 +000022// CHECK-SAME: {{.*}}size: 64, offset: 64)
Adrian Prantl9935f4f2015-06-26 21:25:18 +000023// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16",
Victor Leschuka7ece032016-10-20 00:13:19 +000024// CHECK-SAME: {{.*}}size: 1, 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",
Victor Leschuka7ece032016-10-20 00:13:19 +000041// CHECK-SAME: {{.*}}size: 64, offset: 8)
Adrian Prantl9935f4f2015-06-26 21:25:18 +000042// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9",
Victor Leschuka7ece032016-10-20 00:13:19 +000043// CHECK-SAME: {{.*}}size: 1, 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",
Victor Leschuka7ece032016-10-20 00:13:19 +000062// CHECK-SAME: {{.*}}size: 64, offset: 8)
Adrian Prantl9935f4f2015-06-26 21:25:18 +000063// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9",
Victor Leschuka7ece032016-10-20 00:13:19 +000064// CHECK-SAME: {{.*}}size: 1, 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",
Victor Leschuka7ece032016-10-20 00:13:19 +000084// CHECK-SAME: {{.*}}size: 64, offset: 32)
Adrian Prantl9935f4f2015-06-26 21:25:18 +000085// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs12",
Victor Leschuka7ece032016-10-20 00:13:19 +000086// CHECK-SAME: {{.*}}size: 1, offset: 96, flags: DIFlagBitField, extraData: i64 96)
Adrian Prantl9935f4f2015-06-26 21:25:18 +000087
Peter Collingbourneeeb56ab2016-09-13 01:13:19 +000088struct layout3 l3;
Adrian Prantl9935f4f2015-06-26 21:25:18 +000089struct layout0 l0;
90struct layout1 l1;
91struct layout2 l2;