Auto merge of #86460 - JohnTitor:use-static-in-pattern-err, r=oli-obk

Refactor `PatternError` structure

Now we emit the `StaticInPattern` error precisely.
Fixes #68395
r? `@oli-obk`
This commit is contained in:
bors 2021-06-19 19:46:02 +00:00
commit 150fad30ea
9 changed files with 51 additions and 54 deletions

View File

@ -423,6 +423,7 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> {
_ => {
let pattern_error = match res {
Res::Def(DefKind::ConstParam, _) => PatternError::ConstParamInPattern(span),
Res::Def(DefKind::Static, _) => PatternError::StaticInPattern(span),
_ => PatternError::NonConstPath(span),
};
self.errors.push(pattern_error);
@ -468,11 +469,10 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> {
let instance = match ty::Instance::resolve(self.tcx, param_env_reveal_all, def_id, substs) {
Ok(Some(i)) => i,
Ok(None) => {
self.errors.push(if is_associated_const {
PatternError::AssocConstInPattern(span)
} else {
PatternError::StaticInPattern(span)
});
// It should be assoc consts if there's no error but we cannot resolve it.
debug_assert!(is_associated_const);
self.errors.push(PatternError::AssocConstInPattern(span));
return pat_from_kind(PatKind::Wild);
}

View File

@ -1,10 +0,0 @@
fn main() {
let i = 5;
let index = 6;
match i {
0..=index => println!("winner"),
//~^ ERROR runtime values cannot be referenced in patterns
_ => println!("hello"),
}
}

View File

@ -1,9 +0,0 @@
error[E0080]: runtime values cannot be referenced in patterns
--> $DIR/issue-27895.rs:6:13
|
LL | 0..=index => println!("winner"),
| ^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0080`.

View File

@ -1,7 +0,0 @@
fn main() {
let x = 0;
match 1 {
0 ..= x => {}
//~^ ERROR runtime values cannot be referenced in patterns
};
}

View File

@ -1,9 +0,0 @@
error[E0080]: runtime values cannot be referenced in patterns
--> $DIR/non-constant-in-const-path.rs:4:15
|
LL | 0 ..= x => {}
| ^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0080`.

View File

@ -1,5 +0,0 @@
fn main() {
let x = 255u8;
let 0u8..=x = 0;
//~^ ERROR runtime values cannot be referenced in patterns
}

View File

@ -1,9 +0,0 @@
error[E0080]: runtime values cannot be referenced in patterns
--> $DIR/issue-68394-let-pat-runtime-value.rs:3:15
|
LL | let 0u8..=x = 0;
| ^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0080`.

View File

@ -0,0 +1,18 @@
// Checks if we emit `PatternError`s correctly.
// This is also a regression test for #27895 and #68394.
static FOO: u8 = 10;
fn main() {
let x = 0;
let 0u8..=x = 0;
//~^ ERROR: runtime values cannot be referenced in patterns
let 0u8..=FOO = 0;
//~^ ERROR: statics cannot be referenced in patterns
match 1 {
0 ..= x => {}
//~^ ERROR: runtime values cannot be referenced in patterns
0 ..= FOO => {}
//~^ ERROR: statics cannot be referenced in patterns
};
}

View File

@ -0,0 +1,28 @@
error[E0080]: runtime values cannot be referenced in patterns
--> $DIR/non-constant-in-const-path.rs:8:15
|
LL | let 0u8..=x = 0;
| ^
error[E0158]: statics cannot be referenced in patterns
--> $DIR/non-constant-in-const-path.rs:10:15
|
LL | let 0u8..=FOO = 0;
| ^^^
error[E0080]: runtime values cannot be referenced in patterns
--> $DIR/non-constant-in-const-path.rs:13:15
|
LL | 0 ..= x => {}
| ^
error[E0158]: statics cannot be referenced in patterns
--> $DIR/non-constant-in-const-path.rs:15:15
|
LL | 0 ..= FOO => {}
| ^^^
error: aborting due to 4 previous errors
Some errors have detailed explanations: E0080, E0158.
For more information about an error, try `rustc --explain E0080`.