blob: 773318c79f7c9ad0156ff5a49b7d84b007c4e129 [file] [log] [blame]
Argyrios Kyrtzidisd9e9a0a2013-04-18 17:52:10 +00001// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 -emit-llvm -o - %s | FileCheck %s
Anders Carlsson4b5584b2009-07-23 17:24:40 +00002
3// PR4610
4#pragma pack(4)
5struct ref {
6 struct ref *next;
7} refs;
Argyrios Kyrtzidisd9e9a0a2013-04-18 17:52:10 +00008
9// PR13580
10struct 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
Argyrios Kyrtzidis62a89632013-04-18 18:32:48 +000027struct 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
44struct 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
Stephen Hines651f13c2014-04-23 16:59:28 -070056// CHECK: [[struct_ref:%[a-zA-Z0-9_.]+]] = type { [[struct_ref]]* }
Argyrios Kyrtzidisd9e9a0a2013-04-18 17:52:10 +000057// 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
Stephen Hines651f13c2014-04-23 16:59:28 -070061// CHECK: %struct.S3 = type { [3 x i8], i8, %struct.T3, %struct.T32 }
Argyrios Kyrtzidis62a89632013-04-18 18:32:48 +000062// 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
Argyrios Kyrtzidisd9e9a0a2013-04-18 17:52:10 +000067// CHECK: @refs = common global [[struct_ref]]
68// CHECK: @ss = common global [[struct_S]]