about summary refs log tree commit diff
path: root/src/test/codegen
diff options
context:
space:
mode:
authorDániel Buga <bugadani@gmail.com>2020-08-25 11:44:18 +0200
committerDániel Buga <bugadani@gmail.com>2020-08-31 08:19:15 +0200
commit1d157ce797dddcee16a577796199b1144b4f7f34 (patch)
tree4f8f56536b4cb1d0a27742aac89a57cdca5b4d80 /src/test/codegen
parentc88b167f1518370833c9216706d09735d1e2d697 (diff)
downloadrust-1d157ce797dddcee16a577796199b1144b4f7f34.tar.gz
rust-1d157ce797dddcee16a577796199b1144b4f7f34.zip
Add codegen tests
Diffstat (limited to 'src/test/codegen')
-rw-r--r--src/test/codegen/enum-bounds-check-derived-idx.rs25
-rw-r--r--src/test/codegen/enum-bounds-check-issue-13926.rs19
-rw-r--r--src/test/codegen/enum-bounds-check.rs12
3 files changed, 56 insertions, 0 deletions
diff --git a/src/test/codegen/enum-bounds-check-derived-idx.rs b/src/test/codegen/enum-bounds-check-derived-idx.rs
new file mode 100644
index 00000000000..7e3773b6a3e
--- /dev/null
+++ b/src/test/codegen/enum-bounds-check-derived-idx.rs
@@ -0,0 +1,25 @@
+// This test checks an optimization that is not guaranteed to work. This test case should not block
+// a future LLVM update.
+// compile-flags: -O
+// min-llvm-version: 11.0
+
+#![crate_type = "lib"]
+
+pub enum Bar {
+    A = 1,
+    B = 3,
+}
+
+// CHECK-LABEL: @lookup_inc
+#[no_mangle]
+pub fn lookup_inc(buf: &[u8; 5], f: Bar) -> u8 {
+    // CHECK-NOT: panic_bounds_check
+    buf[f as usize + 1]
+}
+
+// CHECK-LABEL: @lookup_dec
+#[no_mangle]
+pub fn lookup_dec(buf: &[u8; 5], f: Bar) -> u8 {
+    // CHECK-NOT: panic_bounds_check
+    buf[f as usize - 1]
+}
diff --git a/src/test/codegen/enum-bounds-check-issue-13926.rs b/src/test/codegen/enum-bounds-check-issue-13926.rs
new file mode 100644
index 00000000000..ad029f0fa73
--- /dev/null
+++ b/src/test/codegen/enum-bounds-check-issue-13926.rs
@@ -0,0 +1,19 @@
+// This test checks an optimization that is not guaranteed to work. This test case should not block
+// a future LLVM update.
+// compile-flags: -O
+// min-llvm-version: 11.0
+
+#![crate_type = "lib"]
+
+#[repr(u8)]
+pub enum Exception {
+    Low = 5,
+    High = 10,
+}
+
+// CHECK-LABEL: @access
+#[no_mangle]
+pub fn access(array: &[usize; 12], exc: Exception) -> usize {
+    // CHECK-NOT: panic_bounds_check
+    array[(exc as u8 - 4) as usize]
+}
diff --git a/src/test/codegen/enum-bounds-check.rs b/src/test/codegen/enum-bounds-check.rs
index 21a27c9f35d..17322d5911b 100644
--- a/src/test/codegen/enum-bounds-check.rs
+++ b/src/test/codegen/enum-bounds-check.rs
@@ -12,3 +12,15 @@ pub fn lookup(buf: &[u8; 2], f: Foo) -> u8 {
     // CHECK-NOT: panic_bounds_check
     buf[f as usize]
 }
+
+pub enum Bar {
+    A = 2,
+    B = 3
+}
+
+// CHECK-LABEL: @lookup_unmodified
+#[no_mangle]
+pub fn lookup_unmodified(buf: &[u8; 5], f: Bar) -> u8 {
+    // CHECK-NOT: panic_bounds_check
+    buf[f as usize]
+}