Ulrich Weigand | 9230997 | 2012-10-24 12:22:56 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 %s -triple i386-unknown-unknown -emit-llvm -O1 -relaxed-aliasing -fstrict-enums -std=c++11 -o - | FileCheck %s |
| 2 | // RUN: %clang_cc1 %s -triple i386-unknown-unknown -emit-llvm -O1 -relaxed-aliasing -std=c++11 -o - | FileCheck --check-prefix=NO-STRICT-ENUMS %s |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 3 | |
| 4 | bool f(bool *x) { |
| 5 | return *x; |
| 6 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 7 | // CHECK-LABEL: define zeroext i1 @_Z1fPb |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 8 | // CHECK: load i8, i8* %{{[^ ]*}}, align 1, !range [[RANGE_i8_0_2:![^ ]*]] |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 9 | |
Chandler Carruth | 82fe6ae | 2012-03-27 23:58:37 +0000 | [diff] [blame] | 10 | // Only enum-tests follow. Ensure that after the bool test, no further range |
| 11 | // metadata shows up when strict enums are disabled. |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 12 | // NO-STRICT-ENUMS-LABEL: define zeroext i1 @_Z1fPb |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 13 | // NO-STRICT-ENUMS: load i8, i8* %{{[^ ]*}}, align 1, !range |
Chandler Carruth | 82fe6ae | 2012-03-27 23:58:37 +0000 | [diff] [blame] | 14 | // NO-STRICT-ENUMS-NOT: !range |
| 15 | |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 16 | enum e1 { }; |
| 17 | e1 g1(e1 *x) { |
| 18 | return *x; |
| 19 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 20 | // CHECK-LABEL: define i32 @_Z2g1P2e1 |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 21 | // CHECK: ret i32 0 |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 22 | |
| 23 | enum e2 { e2_a = 0 }; |
| 24 | e2 g2(e2 *x) { |
| 25 | return *x; |
| 26 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 27 | // CHECK-LABEL: define i32 @_Z2g2P2e2 |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 28 | // CHECK: ret i32 0 |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 29 | |
| 30 | enum e3 { e3_a = 16 }; |
| 31 | e3 g3(e3 *x) { |
| 32 | return *x; |
| 33 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 34 | // CHECK-LABEL: define i32 @_Z2g3P2e3 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 35 | // CHECK: load i32, i32* %x, align 4, !range [[RANGE_i32_0_32:![^ ]*]] |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 36 | |
| 37 | enum e4 { e4_a = -16}; |
| 38 | e4 g4(e4 *x) { |
| 39 | return *x; |
| 40 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 41 | // CHECK-LABEL: define i32 @_Z2g4P2e4 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 42 | // CHECK: load i32, i32* %x, align 4, !range [[RANGE_i32_m16_16:![^ ]*]] |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 43 | |
| 44 | enum e5 { e5_a = -16, e5_b = 16}; |
| 45 | e5 g5(e5 *x) { |
| 46 | return *x; |
| 47 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 48 | // CHECK-LABEL: define i32 @_Z2g5P2e5 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 49 | // CHECK: load i32, i32* %x, align 4, !range [[RANGE_i32_m32_32:![^ ]*]] |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 50 | |
| 51 | enum e6 { e6_a = -1 }; |
| 52 | e6 g6(e6 *x) { |
| 53 | return *x; |
| 54 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 55 | // CHECK-LABEL: define i32 @_Z2g6P2e6 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 56 | // CHECK: load i32, i32* %x, align 4, !range [[RANGE_i32_m1_1:![^ ]*]] |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 57 | |
| 58 | enum e7 { e7_a = -16, e7_b = 2}; |
| 59 | e7 g7(e7 *x) { |
| 60 | return *x; |
| 61 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 62 | // CHECK-LABEL: define i32 @_Z2g7P2e7 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 63 | // CHECK: load i32, i32* %x, align 4, !range [[RANGE_i32_m16_16]] |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 64 | |
| 65 | enum e8 { e8_a = -17}; |
| 66 | e8 g8(e8 *x) { |
| 67 | return *x; |
| 68 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 69 | // CHECK-LABEL: define i32 @_Z2g8P2e8 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 70 | // CHECK: load i32, i32* %x, align 4, !range [[RANGE_i32_m32_32:![^ ]*]] |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 71 | |
| 72 | enum e9 { e9_a = 17}; |
| 73 | e9 g9(e9 *x) { |
| 74 | return *x; |
| 75 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 76 | // CHECK-LABEL: define i32 @_Z2g9P2e9 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 77 | // CHECK: load i32, i32* %x, align 4, !range [[RANGE_i32_0_32]] |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 78 | |
| 79 | enum e10 { e10_a = -16, e10_b = 32}; |
| 80 | e10 g10(e10 *x) { |
| 81 | return *x; |
| 82 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 83 | // CHECK-LABEL: define i32 @_Z3g10P3e10 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 84 | // CHECK: load i32, i32* %x, align 4, !range [[RANGE_i32_m64_64:![^ ]*]] |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 85 | |
| 86 | enum e11 {e11_a = 4294967296 }; |
| 87 | enum e11 g11(enum e11 *x) { |
| 88 | return *x; |
| 89 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 90 | // CHECK-LABEL: define i64 @_Z3g11P3e11 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 91 | // CHECK: load i64, i64* %x, align {{[84]}}, !range [[RANGE_i64_0_2pow33:![^ ]*]] |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 92 | |
| 93 | enum e12 {e12_a = 9223372036854775808U }; |
| 94 | enum e12 g12(enum e12 *x) { |
| 95 | return *x; |
| 96 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 97 | // CHECK-LABEL: define i64 @_Z3g12P3e12 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 98 | // CHECK: load i64, i64* %x, align {{[84]}} |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 99 | // CHECK-NOT: range |
| 100 | // CHECK: ret |
| 101 | |
| 102 | enum e13 : char {e13_a = -1 }; |
| 103 | e13 g13(e13 *x) { |
| 104 | return *x; |
| 105 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 106 | // CHECK-LABEL: define signext i8 @_Z3g13P3e13 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 107 | // CHECK: load i8, i8* %x, align 1 |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 108 | // CHECK-NOT: range |
| 109 | // CHECK: ret |
| 110 | |
| 111 | enum class e14 {e14_a = 1}; |
| 112 | e14 g14(e14 *x) { |
| 113 | return *x; |
| 114 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 115 | // CHECK-LABEL: define i32 @_Z3g14P3e14 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 116 | // CHECK: load i32, i32* %x, align 4 |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 117 | // CHECK-NOT: range |
| 118 | // CHECK: ret |
| 119 | |
| 120 | enum e15 { e15_a = 2147483648 }; |
| 121 | e15 g15(e15 *x) { |
| 122 | return *x; |
| 123 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 124 | // CHECK-LABEL: define i32 @_Z3g15P3e15 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 125 | // CHECK: load i32, i32* %x, align 4 |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 126 | // CHECK-NOT: range |
| 127 | // CHECK: ret |
| 128 | |
| 129 | enum e16 { e16_a = -2147483648 }; |
| 130 | e16 g16(e16 *x) { |
| 131 | return *x; |
| 132 | } |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 133 | // CHECK-LABEL: define i32 @_Z3g16P3e16 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 134 | // CHECK: load i32, i32* %x, align 4 |
Rafael Espindola | c3f8955 | 2012-03-24 16:50:34 +0000 | [diff] [blame] | 135 | // CHECK-NOT: range |
| 136 | // CHECK: ret |
| 137 | |
| 138 | |
Stephen Hines | 0e2c34f | 2015-03-23 12:09:02 -0700 | [diff] [blame] | 139 | // CHECK: [[RANGE_i8_0_2]] = !{i8 0, i8 2} |
| 140 | // CHECK: [[RANGE_i32_0_32]] = !{i32 0, i32 32} |
| 141 | // CHECK: [[RANGE_i32_m16_16]] = !{i32 -16, i32 16} |
| 142 | // CHECK: [[RANGE_i32_m32_32]] = !{i32 -32, i32 32} |
| 143 | // CHECK: [[RANGE_i32_m1_1]] = !{i32 -1, i32 1} |
| 144 | // CHECK: [[RANGE_i32_m64_64]] = !{i32 -64, i32 64} |
| 145 | // CHECK: [[RANGE_i64_0_2pow33]] = !{i64 0, i64 8589934592} |