about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/test/mir-opt/div_overflow.const_dividend.PreCodegen.after.mir17
-rw-r--r--src/test/mir-opt/div_overflow.const_divisor.PreCodegen.after.mir11
-rw-r--r--src/test/mir-opt/div_overflow.rs18
3 files changed, 46 insertions, 0 deletions
diff --git a/src/test/mir-opt/div_overflow.const_dividend.PreCodegen.after.mir b/src/test/mir-opt/div_overflow.const_dividend.PreCodegen.after.mir
new file mode 100644
index 00000000000..d7f66a6bf4d
--- /dev/null
+++ b/src/test/mir-opt/div_overflow.const_dividend.PreCodegen.after.mir
@@ -0,0 +1,17 @@
+// MIR for `const_dividend` after PreCodegen
+
+fn const_dividend(_1: i32) -> i32 {
+    debug a => _1;                       // in scope 0 at $DIR/div_overflow.rs:+0:23: +0:24
+    let mut _0: i32;                     // return place in scope 0 at $DIR/div_overflow.rs:+0:34: +0:37
+    let mut _2: bool;                    // in scope 0 at $DIR/div_overflow.rs:+1:5: +1:12
+
+    bb0: {
+        _2 = Eq(_1, const 0_i32);        // scope 0 at $DIR/div_overflow.rs:+1:5: +1:12
+        assert(!move _2, "attempt to divide `{}` by zero", const 256_i32) -> bb1; // scope 0 at $DIR/div_overflow.rs:+1:5: +1:12
+    }
+
+    bb1: {
+        _0 = Div(const 256_i32, move _1); // scope 0 at $DIR/div_overflow.rs:+1:5: +1:12
+        return;                          // scope 0 at $DIR/div_overflow.rs:+2:2: +2:2
+    }
+}
diff --git a/src/test/mir-opt/div_overflow.const_divisor.PreCodegen.after.mir b/src/test/mir-opt/div_overflow.const_divisor.PreCodegen.after.mir
new file mode 100644
index 00000000000..7b7ab197825
--- /dev/null
+++ b/src/test/mir-opt/div_overflow.const_divisor.PreCodegen.after.mir
@@ -0,0 +1,11 @@
+// MIR for `const_divisor` after PreCodegen
+
+fn const_divisor(_1: i32) -> i32 {
+    debug a => _1;                       // in scope 0 at $DIR/div_overflow.rs:+0:22: +0:23
+    let mut _0: i32;                     // return place in scope 0 at $DIR/div_overflow.rs:+0:33: +0:36
+
+    bb0: {
+        _0 = Div(move _1, const 256_i32); // scope 0 at $DIR/div_overflow.rs:+1:5: +1:12
+        return;                          // scope 0 at $DIR/div_overflow.rs:+2:2: +2:2
+    }
+}
diff --git a/src/test/mir-opt/div_overflow.rs b/src/test/mir-opt/div_overflow.rs
new file mode 100644
index 00000000000..10ce5bc0f4f
--- /dev/null
+++ b/src/test/mir-opt/div_overflow.rs
@@ -0,0 +1,18 @@
+// compile-flags: -Copt-level=0 -Coverflow-checks=yes
+
+// Tests that division with a const does not emit a panicking branch for overflow
+
+// EMIT_MIR div_overflow.const_divisor.PreCodegen.after.mir
+pub fn const_divisor(a: i32) -> i32 {
+    a / 256
+}
+
+// EMIT_MIR div_overflow.const_dividend.PreCodegen.after.mir
+pub fn const_dividend(a: i32) -> i32 {
+    256 / a
+}
+
+fn main() {
+    const_divisor(123);
+    const_dividend(123);
+}