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:
commit
150fad30ea
@ -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);
|
||||
}
|
||||
|
@ -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"),
|
||||
}
|
||||
}
|
@ -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`.
|
@ -1,7 +0,0 @@
|
||||
fn main() {
|
||||
let x = 0;
|
||||
match 1 {
|
||||
0 ..= x => {}
|
||||
//~^ ERROR runtime values cannot be referenced in patterns
|
||||
};
|
||||
}
|
@ -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`.
|
@ -1,5 +0,0 @@
|
||||
fn main() {
|
||||
let x = 255u8;
|
||||
let 0u8..=x = 0;
|
||||
//~^ ERROR runtime values cannot be referenced in patterns
|
||||
}
|
@ -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`.
|
18
src/test/ui/pattern/non-constant-in-const-path.rs
Normal file
18
src/test/ui/pattern/non-constant-in-const-path.rs
Normal 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
|
||||
};
|
||||
}
|
28
src/test/ui/pattern/non-constant-in-const-path.stderr
Normal file
28
src/test/ui/pattern/non-constant-in-const-path.stderr
Normal 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`.
|
Loading…
x
Reference in New Issue
Block a user