1 | // RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 -emit-llvm -o - %s | FileCheck %s |
2 | |
3 | // PR4610 |
4 | #pragma pack(4) |
5 | struct ref { |
6 | struct ref *next; |
7 | } refs; |
8 | |
9 | // PR13580 |
10 | struct S |
11 | { |
12 | char a[3]; |
13 | #pragma pack(1) |
14 | struct T |
15 | { |
16 | char b; |
17 | int c; |
18 | } d; |
19 | #pragma pack() |
20 | struct T2 |
21 | { |
22 | char b; |
23 | int c; |
24 | } d2; |
25 | } ss; |
26 | |
27 | struct S3 |
28 | { |
29 | char a[3]; |
30 | #pragma pack(push, 2) |
31 | struct T3 |
32 | { |
33 | char b; |
34 | int c; |
35 | } d; |
36 | #pragma pack(pop) |
37 | struct T32 |
38 | { |
39 | char b; |
40 | int c; |
41 | } e; |
42 | } s3; |
43 | |
44 | struct S4 |
45 | { |
46 | char a[3]; |
47 | #pragma align=packed |
48 | struct T4 |
49 | { |
50 | char b; |
51 | int c; |
52 | } d; |
53 | int e; |
54 | } s4; |
55 | |
56 | // CHECK: [[struct_ref:%[a-zA-Z0-9_.]+]] = type { [[struct_ref]]* } |
57 | // CHECK: [[struct_S:%[a-zA-Z0-9_.]+]] = type { [3 x i8], [[struct_T:%[a-zA-Z0-9_.]+]], [[struct_T2:%[a-zA-Z0-9_.]+]] } |
58 | // CHECK: [[struct_T]] = type <{ i8, i32 }> |
59 | // CHECK: [[struct_T2]] = type { i8, i32 } |
60 | |
61 | // CHECK: %struct.S3 = type { [3 x i8], i8, %struct.T3, %struct.T32 } |
62 | // CHECK: %struct.T3 = type <{ i8, i8, i32 }> |
63 | // CHECK: %struct.T32 = type { i8, i32 } |
64 | // CHECK: %struct.S4 = type { [3 x i8], %struct.T4, i32 } |
65 | // CHECK: %struct.T4 = type <{ i8, i32 }> |
66 | |
67 | // CHECK: @refs = common global [[struct_ref]] |
68 | // CHECK: @ss = common global [[struct_S]] |
69 | |