Douglas Katzman | 3459ce2 | 2015-10-08 04:24:12 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -x c -debug-info-kind=limited -emit-llvm -triple x86_64-apple-darwin -o - %s | FileCheck %s |
Adrian Prantl | 9935f4f | 2015-06-26 21:25:18 +0000 | [diff] [blame] | 2 | |
| 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 | // --------------------------------------------------------------------- |
| 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, align: 64, offset: 64) |
| 23 | // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16", |
David Majnemer | b4b671e | 2016-06-30 03:01:59 +0000 | [diff] [blame] | 24 | // CHECK-SAME: {{.*}}size: 1, align: 32, offset: 128, flags: DIFlagBitField, extraData: i64 128) |
Adrian Prantl | 9935f4f | 2015-06-26 21:25:18 +0000 | [diff] [blame] | 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, align: 8, offset: 8) |
| 42 | // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9", |
David Majnemer | b4b671e | 2016-06-30 03:01:59 +0000 | [diff] [blame] | 43 | // CHECK-SAME: {{.*}}size: 1, align: 32, offset: 72, flags: DIFlagBitField, extraData: i64 72) |
Adrian Prantl | 9935f4f | 2015-06-26 21:25:18 +0000 | [diff] [blame] | 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, align: 8, offset: 8) |
| 63 | // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9", |
David Majnemer | b4b671e | 2016-06-30 03:01:59 +0000 | [diff] [blame] | 64 | // CHECK-SAME: {{.*}}size: 1, align: 32, offset: 72, flags: DIFlagBitField, extraData: i64 72) |
Adrian Prantl | 9935f4f | 2015-06-26 21:25:18 +0000 | [diff] [blame] | 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, align: 32, offset: 32) |
| 85 | // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs12", |
David Majnemer | b4b671e | 2016-06-30 03:01:59 +0000 | [diff] [blame] | 86 | // CHECK-SAME: {{.*}}size: 1, align: 32, offset: 96, flags: DIFlagBitField, extraData: i64 96) |
Adrian Prantl | 9935f4f | 2015-06-26 21:25:18 +0000 | [diff] [blame] | 87 | |
| 88 | struct layout0 l0; |
| 89 | struct layout1 l1; |
| 90 | struct layout2 l2; |
| 91 | struct layout3 l3; |