about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2020-02-15 11:47:11 +0100
committerRalf Jung <post@ralfj.de>2020-02-15 11:47:11 +0100
commit415218fc8d590063a8c5cd403ff890fb91c0bd2c (patch)
tree358a44244e481efc89f3fa875fdfd30c79cbbb7e /src
parent2107e73d2f0605e916d7b17b1cc0dbb5a1353765 (diff)
downloadrust-415218fc8d590063a8c5cd403ff890fb91c0bd2c.tar.gz
rust-415218fc8d590063a8c5cd403ff890fb91c0bd2c.zip
expand assoc-const test a bit, just to be sure
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/consts/issue-69020.default.stderr28
-rw-r--r--src/test/ui/consts/issue-69020.noopt.stderr28
-rw-r--r--src/test/ui/consts/issue-69020.opt.stderr28
-rw-r--r--src/test/ui/consts/issue-69020.opt_with_overflow_checks.stderr28
-rw-r--r--src/test/ui/consts/issue-69020.rs16
5 files changed, 110 insertions, 18 deletions
diff --git a/src/test/ui/consts/issue-69020.default.stderr b/src/test/ui/consts/issue-69020.default.stderr
index 0bf40ce4b31..1b1987f4dc3 100644
--- a/src/test/ui/consts/issue-69020.default.stderr
+++ b/src/test/ui/consts/issue-69020.default.stderr
@@ -1,10 +1,30 @@
 error: this arithmetic operation will overflow
-  --> $DIR/issue-69020.rs:15:20
+  --> $DIR/issue-69020.rs:21:22
    |
-LL |     const N: i32 = -i32::MIN + T::N;
-   |                    ^^^^^^^^^ attempt to negate with overflow
+LL |     const NEG: i32 = -i32::MIN + T::NEG;
+   |                      ^^^^^^^^^ attempt to negate with overflow
    |
    = note: `#[deny(overflow)]` on by default
 
-error: aborting due to previous error
+error: this arithmetic operation will overflow
+  --> $DIR/issue-69020.rs:23:22
+   |
+LL |     const ADD: i32 = (i32::MAX+1) + T::ADD;
+   |                      ^^^^^^^^^^^^ attempt to add with overflow
+
+error: this operation will panic at runtime
+  --> $DIR/issue-69020.rs:25:22
+   |
+LL |     const DIV: i32 = (1/0) + T::DIV;
+   |                      ^^^^^ attempt to divide by zero
+   |
+   = note: `#[deny(panic)]` on by default
+
+error: this operation will panic at runtime
+  --> $DIR/issue-69020.rs:27:22
+   |
+LL |     const OOB: i32 = [1][1] + T::OOB;
+   |                      ^^^^^^ index out of bounds: the len is 1 but the index is 1
+
+error: aborting due to 4 previous errors
 
diff --git a/src/test/ui/consts/issue-69020.noopt.stderr b/src/test/ui/consts/issue-69020.noopt.stderr
index 0bf40ce4b31..1b1987f4dc3 100644
--- a/src/test/ui/consts/issue-69020.noopt.stderr
+++ b/src/test/ui/consts/issue-69020.noopt.stderr
@@ -1,10 +1,30 @@
 error: this arithmetic operation will overflow
-  --> $DIR/issue-69020.rs:15:20
+  --> $DIR/issue-69020.rs:21:22
    |
-LL |     const N: i32 = -i32::MIN + T::N;
-   |                    ^^^^^^^^^ attempt to negate with overflow
+LL |     const NEG: i32 = -i32::MIN + T::NEG;
+   |                      ^^^^^^^^^ attempt to negate with overflow
    |
    = note: `#[deny(overflow)]` on by default
 
-error: aborting due to previous error
+error: this arithmetic operation will overflow
+  --> $DIR/issue-69020.rs:23:22
+   |
+LL |     const ADD: i32 = (i32::MAX+1) + T::ADD;
+   |                      ^^^^^^^^^^^^ attempt to add with overflow
+
+error: this operation will panic at runtime
+  --> $DIR/issue-69020.rs:25:22
+   |
+LL |     const DIV: i32 = (1/0) + T::DIV;
+   |                      ^^^^^ attempt to divide by zero
+   |
+   = note: `#[deny(panic)]` on by default
+
+error: this operation will panic at runtime
+  --> $DIR/issue-69020.rs:27:22
+   |
+LL |     const OOB: i32 = [1][1] + T::OOB;
+   |                      ^^^^^^ index out of bounds: the len is 1 but the index is 1
+
+error: aborting due to 4 previous errors
 
diff --git a/src/test/ui/consts/issue-69020.opt.stderr b/src/test/ui/consts/issue-69020.opt.stderr
index 0bf40ce4b31..1b1987f4dc3 100644
--- a/src/test/ui/consts/issue-69020.opt.stderr
+++ b/src/test/ui/consts/issue-69020.opt.stderr
@@ -1,10 +1,30 @@
 error: this arithmetic operation will overflow
-  --> $DIR/issue-69020.rs:15:20
+  --> $DIR/issue-69020.rs:21:22
    |
-LL |     const N: i32 = -i32::MIN + T::N;
-   |                    ^^^^^^^^^ attempt to negate with overflow
+LL |     const NEG: i32 = -i32::MIN + T::NEG;
+   |                      ^^^^^^^^^ attempt to negate with overflow
    |
    = note: `#[deny(overflow)]` on by default
 
-error: aborting due to previous error
+error: this arithmetic operation will overflow
+  --> $DIR/issue-69020.rs:23:22
+   |
+LL |     const ADD: i32 = (i32::MAX+1) + T::ADD;
+   |                      ^^^^^^^^^^^^ attempt to add with overflow
+
+error: this operation will panic at runtime
+  --> $DIR/issue-69020.rs:25:22
+   |
+LL |     const DIV: i32 = (1/0) + T::DIV;
+   |                      ^^^^^ attempt to divide by zero
+   |
+   = note: `#[deny(panic)]` on by default
+
+error: this operation will panic at runtime
+  --> $DIR/issue-69020.rs:27:22
+   |
+LL |     const OOB: i32 = [1][1] + T::OOB;
+   |                      ^^^^^^ index out of bounds: the len is 1 but the index is 1
+
+error: aborting due to 4 previous errors
 
diff --git a/src/test/ui/consts/issue-69020.opt_with_overflow_checks.stderr b/src/test/ui/consts/issue-69020.opt_with_overflow_checks.stderr
index 0bf40ce4b31..1b1987f4dc3 100644
--- a/src/test/ui/consts/issue-69020.opt_with_overflow_checks.stderr
+++ b/src/test/ui/consts/issue-69020.opt_with_overflow_checks.stderr
@@ -1,10 +1,30 @@
 error: this arithmetic operation will overflow
-  --> $DIR/issue-69020.rs:15:20
+  --> $DIR/issue-69020.rs:21:22
    |
-LL |     const N: i32 = -i32::MIN + T::N;
-   |                    ^^^^^^^^^ attempt to negate with overflow
+LL |     const NEG: i32 = -i32::MIN + T::NEG;
+   |                      ^^^^^^^^^ attempt to negate with overflow
    |
    = note: `#[deny(overflow)]` on by default
 
-error: aborting due to previous error
+error: this arithmetic operation will overflow
+  --> $DIR/issue-69020.rs:23:22
+   |
+LL |     const ADD: i32 = (i32::MAX+1) + T::ADD;
+   |                      ^^^^^^^^^^^^ attempt to add with overflow
+
+error: this operation will panic at runtime
+  --> $DIR/issue-69020.rs:25:22
+   |
+LL |     const DIV: i32 = (1/0) + T::DIV;
+   |                      ^^^^^ attempt to divide by zero
+   |
+   = note: `#[deny(panic)]` on by default
+
+error: this operation will panic at runtime
+  --> $DIR/issue-69020.rs:27:22
+   |
+LL |     const OOB: i32 = [1][1] + T::OOB;
+   |                      ^^^^^^ index out of bounds: the len is 1 but the index is 1
+
+error: aborting due to 4 previous errors
 
diff --git a/src/test/ui/consts/issue-69020.rs b/src/test/ui/consts/issue-69020.rs
index 9f1ed862c7b..963ab01a33c 100644
--- a/src/test/ui/consts/issue-69020.rs
+++ b/src/test/ui/consts/issue-69020.rs
@@ -8,10 +8,22 @@
 use std::i32;
 
 pub trait Foo {
-    const N: i32;
+    const NEG: i32;
+    const ADD: i32;
+    const DIV: i32;
+    const OOB: i32;
 }
 
+// These constants cannot be evaluated already (they depend on `T::N`), so
+// they can just be linted like normal run-time code.  But codegen works
+// a bit different in const context, so this test makes sure that we still catch overflow.
 impl<T: Foo> Foo for Vec<T> {
-    const N: i32 = -i32::MIN + T::N;
+    const NEG: i32 = -i32::MIN + T::NEG;
     //~^ ERROR arithmetic operation will overflow
+    const ADD: i32 = (i32::MAX+1) + T::ADD;
+    //~^ ERROR arithmetic operation will overflow
+    const DIV: i32 = (1/0) + T::DIV;
+    //~^ ERROR operation will panic
+    const OOB: i32 = [1][1] + T::OOB;
+    //~^ ERROR operation will panic
 }