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