forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#90930 - Nilstrieb:fix-non-const-value-ice, …
…r=estebank Fix `non-constant value` ICE (rust-lang#90878) This also fixes the same suggestion, which was kind of broken, because it just searched for the last occurence of `const` to replace with a `let`. This works great in some cases, but when there is no const and a leading space to the file, it doesn't work and panic with overflow because it thought that it had found a const. I also changed the suggestion to only trigger if the `const` and the non-constant value are on the same line, because if they aren't, the suggestion is very likely to be wrong. Also don't trigger the suggestion if the found `const` is on line 0, because that triggers the ICE. Asking Esteban to review since he was the last one to change the relevant code. r? `@estebank` Fixes rust-lang#90878
- Loading branch information
Showing
11 changed files
with
125 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
#![l=|x|[b;x ]] //~ ERROR unexpected token: `|x| [b; x]` | ||
//~^ ERROR cannot find attribute `l` in this scope | ||
//~^^ ERROR attempt to use a non-constant value in a constant [E0435] | ||
//~^^^ ERROR cannot find value `b` in this scope [E0425] | ||
|
||
// notice the space at the start, | ||
// we can't attach any attributes to this file because it needs to be at the start | ||
|
||
// this example has been slightly modified (adding ]] at the end), so that it actually works here | ||
// it still produces the same issue though | ||
|
||
fn main() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
error: unexpected token: `|x| [b; x]` | ||
--> $DIR/issue-90878-2.rs:1:7 | ||
| | ||
LL | #![l=|x|[b;x ]] | ||
| ^^^^^^^^^ | ||
|
||
error: cannot find attribute `l` in this scope | ||
--> $DIR/issue-90878-2.rs:1:5 | ||
| | ||
LL | #![l=|x|[b;x ]] | ||
| ^ | ||
|
||
error[E0435]: attempt to use a non-constant value in a constant | ||
--> $DIR/issue-90878-2.rs:1:13 | ||
| | ||
LL | #![l=|x|[b;x ]] | ||
| - ^ | ||
| | | ||
| this would need to be a `const` | ||
|
||
error[E0425]: cannot find value `b` in this scope | ||
--> $DIR/issue-90878-2.rs:1:11 | ||
| | ||
LL | #![l=|x|[b;x ]] | ||
| ^ help: a local variable with a similar name exists: `x` | ||
|
||
error: aborting due to 4 previous errors | ||
|
||
Some errors have detailed explanations: E0425, E0435. | ||
For more information about an error, try `rustc --explain E0425`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
|
||
fn main() { | ||
|x: usize| [0; x]; //~ ERROR attempt to use a non-constant value in a constant [E0435] | ||
// (note the newline before "fn") | ||
} | ||
// ignore-tidy-leading-newlines |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
error[E0435]: attempt to use a non-constant value in a constant | ||
--> $DIR/issue-90878-3.rs:3:20 | ||
| | ||
LL | |x: usize| [0; x]; | ||
| - ^ | ||
| | | ||
| this would need to be a `const` | ||
|
||
error: aborting due to previous error | ||
|
||
For more information about this error, try `rustc --explain E0435`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
fn main() { | ||
|x: usize| [0; x]; //~ ERROR attempt to use a non-constant value in a constant [E0435] | ||
// (note the space before "fn") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
error[E0435]: attempt to use a non-constant value in a constant | ||
--> $DIR/issue-90878.rs:2:20 | ||
| | ||
LL | |x: usize| [0; x]; | ||
| - ^ | ||
| | | ||
| this would need to be a `const` | ||
|
||
error: aborting due to previous error | ||
|
||
For more information about this error, try `rustc --explain E0435`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
fn main() { | ||
let x = 5; | ||
const Y: i32 = x; //~ ERROR attempt to use a non-constant value in a constant [E0435] | ||
|
||
let x = 5; | ||
let _ = [0; x]; //~ ERROR attempt to use a non-constant value in a constant [E0435] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
error[E0435]: attempt to use a non-constant value in a constant | ||
--> $DIR/non-const-value-in-const.rs:3:20 | ||
| | ||
LL | const Y: i32 = x; | ||
| ------- ^ non-constant value | ||
| | | ||
| help: consider using `let` instead of `const`: `let Y` | ||
|
||
error[E0435]: attempt to use a non-constant value in a constant | ||
--> $DIR/non-const-value-in-const.rs:6:17 | ||
| | ||
LL | let x = 5; | ||
| ----- help: consider using `const` instead of `let`: `const x` | ||
... | ||
LL | let _ = [0; x]; | ||
| ^ non-constant value | ||
|
||
error: aborting due to 2 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0435`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters