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 Foo for Vec { - 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 }