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, [2 x i8], %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