pr12251.cpp revision 74873c478fd9e40e445d05fadf2d24574459f4c2
1// RUN: %clang_cc1 %s -emit-llvm -O1 -relaxed-aliasing -std=c++11 -o - | FileCheck %s
2
3bool f(bool *x) {
4  return *x;
5}
6// CHECK: define zeroext i1 @_Z1fPb
7// CHECK: load i8* %{{.*}}, align 1, !range !0
8
9enum e1 { };
10e1 g1(e1 *x) {
11  return *x;
12}
13// CHECK: define i32 @_Z2g1P2e1
14// CHECK: load i32* %x, align 4, !range !1
15
16enum e2 { e2_a = 0 };
17e2 g2(e2 *x) {
18  return *x;
19}
20// CHECK: define i32 @_Z2g2P2e2
21// CHECK: load i32* %x, align 4, !range !1
22
23enum e3 { e3_a = 16 };
24e3 g3(e3 *x) {
25  return *x;
26}
27// CHECK: define i32 @_Z2g3P2e3
28// CHECK: load i32* %x, align 4, !range !2
29
30enum e4 { e4_a = -16};
31e4 g4(e4 *x) {
32  return *x;
33}
34// CHECK: define i32 @_Z2g4P2e4
35// CHECK: load i32* %x, align 4, !range !3
36
37enum e5 { e5_a = -16, e5_b = 16};
38e5 g5(e5 *x) {
39  return *x;
40}
41// CHECK: define i32 @_Z2g5P2e5
42// CHECK: load i32* %x, align 4, !range !4
43
44enum e6 { e6_a = -1 };
45e6 g6(e6 *x) {
46  return *x;
47}
48// CHECK: define i32 @_Z2g6P2e6
49// CHECK: load i32* %x, align 4, !range !5
50
51enum e7 { e7_a = -16, e7_b = 2};
52e7 g7(e7 *x) {
53  return *x;
54}
55// CHECK: define i32 @_Z2g7P2e7
56// CHECK: load i32* %x, align 4, !range !3
57
58enum e8 { e8_a = -17};
59e8 g8(e8 *x) {
60  return *x;
61}
62// CHECK: define i32 @_Z2g8P2e8
63// CHECK: load i32* %x, align 4, !range !4
64
65enum e9 { e9_a = 17};
66e9 g9(e9 *x) {
67  return *x;
68}
69// CHECK: define i32 @_Z2g9P2e9
70// CHECK: load i32* %x, align 4, !range !2
71
72enum e10 { e10_a = -16, e10_b = 32};
73e10 g10(e10 *x) {
74  return *x;
75}
76// CHECK: define i32 @_Z3g10P3e10
77// CHECK: load i32* %x, align 4, !range !6
78
79enum e11 {e11_a = 4294967296 };
80enum e11 g11(enum e11 *x) {
81  return *x;
82}
83// CHECK: define i64 @_Z3g11P3e11
84// CHECK: load i64* %x, align {{[84]}}, !range !7
85
86enum e12 {e12_a = 9223372036854775808U };
87enum e12 g12(enum e12 *x) {
88  return *x;
89}
90// CHECK: define i64 @_Z3g12P3e12
91// CHECK: load i64* %x, align {{[84]}}
92// CHECK-NOT: range
93// CHECK: ret
94
95enum e13 : char {e13_a = -1 };
96e13 g13(e13 *x) {
97  return *x;
98}
99// CHECK: define signext i8 @_Z3g13P3e13
100// CHECK: load i8* %x, align 1
101// CHECK-NOT: range
102// CHECK: ret
103
104enum class e14 {e14_a = 1};
105e14 g14(e14 *x) {
106  return *x;
107}
108// CHECK: define i32 @_Z3g14P3e14
109// CHECK: load i32* %x, align 4
110// CHECK-NOT: range
111// CHECK: ret
112
113enum e15 { e15_a = 2147483648 };
114e15 g15(e15 *x) {
115  return *x;
116}
117// CHECK: define i32 @_Z3g15P3e15
118// CHECK: load i32* %x, align 4
119// CHECK-NOT: range
120// CHECK: ret
121
122enum e16 { e16_a = -2147483648 };
123e16 g16(e16 *x) {
124  return *x;
125}
126// CHECK: define i32 @_Z3g16P3e16
127// CHECK: load i32* %x, align 4
128// CHECK-NOT: range
129// CHECK: ret
130
131
132// CHECK: !0 = metadata !{i8 0, i8 2}
133// CHECK: !1 = metadata !{i32 0, i32 1}
134// CHECK: !2 = metadata !{i32 0, i32 32}
135// CHECK: !3 = metadata !{i32 -16, i32 16}
136// CHECK: !4 = metadata !{i32 -32, i32 32}
137// CHECK: !5 = metadata !{i32 -1, i32 1}
138// CHECK: !6 = metadata !{i32 -64, i32 64}
139// CHECK: !7 = metadata !{i64 0, i64 8589934592}
140