diff options
| author | Ralf Jung <post@ralfj.de> | 2020-02-15 11:47:11 +0100 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2020-02-15 11:47:11 +0100 |
| commit | 415218fc8d590063a8c5cd403ff890fb91c0bd2c (patch) | |
| tree | 358a44244e481efc89f3fa875fdfd30c79cbbb7e /src | |
| parent | 2107e73d2f0605e916d7b17b1cc0dbb5a1353765 (diff) | |
| download | rust-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.stderr | 28 | ||||
| -rw-r--r-- | src/test/ui/consts/issue-69020.noopt.stderr | 28 | ||||
| -rw-r--r-- | src/test/ui/consts/issue-69020.opt.stderr | 28 | ||||
| -rw-r--r-- | src/test/ui/consts/issue-69020.opt_with_overflow_checks.stderr | 28 | ||||
| -rw-r--r-- | src/test/ui/consts/issue-69020.rs | 16 |
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 } |
