mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 09:14:20 +00:00
Auto merge of #121087 - oli-obk:eager_const_failures, r=lcnr
Always evaluate free constants and statics, even if previous errors occurred work towards https://github.com/rust-lang/rust/issues/79738 We will need to evaluate static items before the `definitions.freeze()` below, as we will start creating new `DefId`s (for nested allocations) within the `eval_static_initializer` query. But even without that motivation, this is a good change. Hard errors should always be reported and not silenced if other errors happened earlier.
This commit is contained in:
commit
ba2139afd6
@ -13,8 +13,6 @@
|
|||||||
|
|
||||||
const ARR: [i32; 2] = [1, 2];
|
const ARR: [i32; 2] = [1, 2];
|
||||||
const REF: &i32 = &ARR[idx()]; // Ok, should not produce stderr, since `suppress-restriction-lint-in-const` is set true.
|
const REF: &i32 = &ARR[idx()]; // Ok, should not produce stderr, since `suppress-restriction-lint-in-const` is set true.
|
||||||
const REF_ERR: &i32 = &ARR[idx4()]; // Ok, let rustc handle const contexts.
|
|
||||||
//~^ ERROR: failed
|
|
||||||
|
|
||||||
const fn idx() -> usize {
|
const fn idx() -> usize {
|
||||||
1
|
1
|
||||||
@ -35,9 +33,6 @@ fn main() {
|
|||||||
x[const { idx() }]; // Ok, should not produce stderr.
|
x[const { idx() }]; // Ok, should not produce stderr.
|
||||||
x[const { idx4() }]; // Ok, let rustc's `unconditional_panic` lint handle `usize` indexing on arrays.
|
x[const { idx4() }]; // Ok, let rustc's `unconditional_panic` lint handle `usize` indexing on arrays.
|
||||||
const { &ARR[idx()] }; // Ok, should not produce stderr, since `suppress-restriction-lint-in-const` is set true.
|
const { &ARR[idx()] }; // Ok, should not produce stderr, since `suppress-restriction-lint-in-const` is set true.
|
||||||
const { &ARR[idx4()] }; // Ok, should not produce stderr, since `suppress-restriction-lint-in-const` is set true.
|
|
||||||
//
|
|
||||||
//~^^ ERROR: failed
|
|
||||||
|
|
||||||
let y = &x;
|
let y = &x;
|
||||||
y[0]; // Ok, referencing shouldn't affect this lint. See the issue 6021
|
y[0]; // Ok, referencing shouldn't affect this lint. See the issue 6021
|
||||||
|
@ -1,17 +1,5 @@
|
|||||||
error[E0080]: evaluation of `main::{constant#3}` failed
|
|
||||||
--> $DIR/test.rs:38:14
|
|
||||||
|
|
|
||||||
LL | const { &ARR[idx4()] }; // Ok, should not produce stderr, since `suppress-restriction-lint-in-const` is set true.
|
|
||||||
| ^^^^^^^^^^^ index out of bounds: the length is 2 but the index is 4
|
|
||||||
|
|
||||||
note: erroneous constant encountered
|
|
||||||
--> $DIR/test.rs:38:5
|
|
||||||
|
|
|
||||||
LL | const { &ARR[idx4()] }; // Ok, should not produce stderr, since `suppress-restriction-lint-in-const` is set true.
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/test.rs:29:5
|
--> $DIR/test.rs:27:5
|
||||||
|
|
|
|
||||||
LL | x[index];
|
LL | x[index];
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
@ -21,7 +9,7 @@ LL | x[index];
|
|||||||
= help: to override `-D warnings` add `#[allow(clippy::indexing_slicing)]`
|
= help: to override `-D warnings` add `#[allow(clippy::indexing_slicing)]`
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/test.rs:47:5
|
--> $DIR/test.rs:42:5
|
||||||
|
|
|
|
||||||
LL | v[0];
|
LL | v[0];
|
||||||
| ^^^^
|
| ^^^^
|
||||||
@ -29,7 +17,7 @@ LL | v[0];
|
|||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/test.rs:48:5
|
--> $DIR/test.rs:43:5
|
||||||
|
|
|
|
||||||
LL | v[10];
|
LL | v[10];
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
@ -37,7 +25,7 @@ LL | v[10];
|
|||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/test.rs:49:5
|
--> $DIR/test.rs:44:5
|
||||||
|
|
|
|
||||||
LL | v[1 << 3];
|
LL | v[1 << 3];
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
@ -45,7 +33,7 @@ LL | v[1 << 3];
|
|||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/test.rs:55:5
|
--> $DIR/test.rs:50:5
|
||||||
|
|
|
|
||||||
LL | v[N];
|
LL | v[N];
|
||||||
| ^^^^
|
| ^^^^
|
||||||
@ -53,19 +41,12 @@ LL | v[N];
|
|||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/test.rs:56:5
|
--> $DIR/test.rs:51:5
|
||||||
|
|
|
|
||||||
LL | v[M];
|
LL | v[M];
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
|
|
||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
||||||
|
|
||||||
error[E0080]: evaluation of constant value failed
|
error: aborting due to 6 previous errors
|
||||||
--> $DIR/test.rs:16:24
|
|
||||||
|
|
|
||||||
LL | const REF_ERR: &i32 = &ARR[idx4()]; // Ok, let rustc handle const contexts.
|
|
||||||
| ^^^^^^^^^^^ index out of bounds: the length is 2 but the index is 4
|
|
||||||
|
|
||||||
error: aborting due to 8 previous errors
|
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0080`.
|
|
||||||
|
@ -13,8 +13,6 @@
|
|||||||
const ARR: [i32; 2] = [1, 2];
|
const ARR: [i32; 2] = [1, 2];
|
||||||
const REF: &i32 = &ARR[idx()]; // This should be linted, since `suppress-restriction-lint-in-const` default is false.
|
const REF: &i32 = &ARR[idx()]; // This should be linted, since `suppress-restriction-lint-in-const` default is false.
|
||||||
//~^ ERROR: indexing may panic
|
//~^ ERROR: indexing may panic
|
||||||
const REF_ERR: &i32 = &ARR[idx4()]; // Ok, let rustc handle const contexts.
|
|
||||||
//~^ ERROR: indexing may panic
|
|
||||||
|
|
||||||
const fn idx() -> usize {
|
const fn idx() -> usize {
|
||||||
1
|
1
|
||||||
|
@ -9,29 +9,20 @@ LL | const REF: &i32 = &ARR[idx()]; // This should be linted, since `suppress-re
|
|||||||
= note: `-D clippy::indexing-slicing` implied by `-D warnings`
|
= note: `-D clippy::indexing-slicing` implied by `-D warnings`
|
||||||
= help: to override `-D warnings` add `#[allow(clippy::indexing_slicing)]`
|
= help: to override `-D warnings` add `#[allow(clippy::indexing_slicing)]`
|
||||||
|
|
||||||
error: indexing may panic
|
|
||||||
--> $DIR/indexing_slicing_index.rs:16:24
|
|
||||||
|
|
|
||||||
LL | const REF_ERR: &i32 = &ARR[idx4()]; // Ok, let rustc handle const contexts.
|
|
||||||
| ^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
|
||||||
= note: the suggestion might not be applicable in constant blocks
|
|
||||||
|
|
||||||
error[E0080]: evaluation of `main::{constant#3}` failed
|
error[E0080]: evaluation of `main::{constant#3}` failed
|
||||||
--> $DIR/indexing_slicing_index.rs:48:14
|
--> $DIR/indexing_slicing_index.rs:46:14
|
||||||
|
|
|
|
||||||
LL | const { &ARR[idx4()] };
|
LL | const { &ARR[idx4()] };
|
||||||
| ^^^^^^^^^^^ index out of bounds: the length is 2 but the index is 4
|
| ^^^^^^^^^^^ index out of bounds: the length is 2 but the index is 4
|
||||||
|
|
||||||
note: erroneous constant encountered
|
note: erroneous constant encountered
|
||||||
--> $DIR/indexing_slicing_index.rs:48:5
|
--> $DIR/indexing_slicing_index.rs:46:5
|
||||||
|
|
|
|
||||||
LL | const { &ARR[idx4()] };
|
LL | const { &ARR[idx4()] };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/indexing_slicing_index.rs:29:5
|
--> $DIR/indexing_slicing_index.rs:27:5
|
||||||
|
|
|
|
||||||
LL | x[index];
|
LL | x[index];
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
@ -39,7 +30,7 @@ LL | x[index];
|
|||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
||||||
|
|
||||||
error: index is out of bounds
|
error: index is out of bounds
|
||||||
--> $DIR/indexing_slicing_index.rs:32:5
|
--> $DIR/indexing_slicing_index.rs:30:5
|
||||||
|
|
|
|
||||||
LL | x[4];
|
LL | x[4];
|
||||||
| ^^^^
|
| ^^^^
|
||||||
@ -48,13 +39,13 @@ LL | x[4];
|
|||||||
= help: to override `-D warnings` add `#[allow(clippy::out_of_bounds_indexing)]`
|
= help: to override `-D warnings` add `#[allow(clippy::out_of_bounds_indexing)]`
|
||||||
|
|
||||||
error: index is out of bounds
|
error: index is out of bounds
|
||||||
--> $DIR/indexing_slicing_index.rs:34:5
|
--> $DIR/indexing_slicing_index.rs:32:5
|
||||||
|
|
|
|
||||||
LL | x[1 << 3];
|
LL | x[1 << 3];
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/indexing_slicing_index.rs:45:14
|
--> $DIR/indexing_slicing_index.rs:43:14
|
||||||
|
|
|
|
||||||
LL | const { &ARR[idx()] };
|
LL | const { &ARR[idx()] };
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
@ -63,7 +54,7 @@ LL | const { &ARR[idx()] };
|
|||||||
= note: the suggestion might not be applicable in constant blocks
|
= note: the suggestion might not be applicable in constant blocks
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/indexing_slicing_index.rs:48:14
|
--> $DIR/indexing_slicing_index.rs:46:14
|
||||||
|
|
|
|
||||||
LL | const { &ARR[idx4()] };
|
LL | const { &ARR[idx4()] };
|
||||||
| ^^^^^^^^^^^
|
| ^^^^^^^^^^^
|
||||||
@ -72,13 +63,13 @@ LL | const { &ARR[idx4()] };
|
|||||||
= note: the suggestion might not be applicable in constant blocks
|
= note: the suggestion might not be applicable in constant blocks
|
||||||
|
|
||||||
error: index is out of bounds
|
error: index is out of bounds
|
||||||
--> $DIR/indexing_slicing_index.rs:55:5
|
--> $DIR/indexing_slicing_index.rs:53:5
|
||||||
|
|
|
|
||||||
LL | y[4];
|
LL | y[4];
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/indexing_slicing_index.rs:58:5
|
--> $DIR/indexing_slicing_index.rs:56:5
|
||||||
|
|
|
|
||||||
LL | v[0];
|
LL | v[0];
|
||||||
| ^^^^
|
| ^^^^
|
||||||
@ -86,7 +77,7 @@ LL | v[0];
|
|||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/indexing_slicing_index.rs:60:5
|
--> $DIR/indexing_slicing_index.rs:58:5
|
||||||
|
|
|
|
||||||
LL | v[10];
|
LL | v[10];
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
@ -94,7 +85,7 @@ LL | v[10];
|
|||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/indexing_slicing_index.rs:62:5
|
--> $DIR/indexing_slicing_index.rs:60:5
|
||||||
|
|
|
|
||||||
LL | v[1 << 3];
|
LL | v[1 << 3];
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
@ -102,13 +93,13 @@ LL | v[1 << 3];
|
|||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
||||||
|
|
||||||
error: index is out of bounds
|
error: index is out of bounds
|
||||||
--> $DIR/indexing_slicing_index.rs:70:5
|
--> $DIR/indexing_slicing_index.rs:68:5
|
||||||
|
|
|
|
||||||
LL | x[N];
|
LL | x[N];
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/indexing_slicing_index.rs:73:5
|
--> $DIR/indexing_slicing_index.rs:71:5
|
||||||
|
|
|
|
||||||
LL | v[N];
|
LL | v[N];
|
||||||
| ^^^^
|
| ^^^^
|
||||||
@ -116,7 +107,7 @@ LL | v[N];
|
|||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
||||||
|
|
||||||
error: indexing may panic
|
error: indexing may panic
|
||||||
--> $DIR/indexing_slicing_index.rs:75:5
|
--> $DIR/indexing_slicing_index.rs:73:5
|
||||||
|
|
|
|
||||||
LL | v[M];
|
LL | v[M];
|
||||||
| ^^^^
|
| ^^^^
|
||||||
@ -124,17 +115,11 @@ LL | v[M];
|
|||||||
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
= help: consider using `.get(n)` or `.get_mut(n)` instead
|
||||||
|
|
||||||
error: index is out of bounds
|
error: index is out of bounds
|
||||||
--> $DIR/indexing_slicing_index.rs:79:13
|
--> $DIR/indexing_slicing_index.rs:77:13
|
||||||
|
|
|
|
||||||
LL | let _ = x[4];
|
LL | let _ = x[4];
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
||||||
error[E0080]: evaluation of constant value failed
|
error: aborting due to 15 previous errors
|
||||||
--> $DIR/indexing_slicing_index.rs:16:24
|
|
||||||
|
|
|
||||||
LL | const REF_ERR: &i32 = &ARR[idx4()]; // Ok, let rustc handle const contexts.
|
|
||||||
| ^^^^^^^^^^^ index out of bounds: the length is 2 but the index is 4
|
|
||||||
|
|
||||||
error: aborting due to 17 previous errors
|
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0080`.
|
For more information about this error, try `rustc --explain E0080`.
|
||||||
|
Loading…
Reference in New Issue
Block a user