Correct error on partially unreachable or-pat in if let

This commit is contained in:
Nadrieril 2019-11-29 12:51:34 +00:00
parent 5c7bd52a78
commit a476af22e8
3 changed files with 24 additions and 25 deletions

View File

@ -414,16 +414,9 @@ fn check_arms<'p, 'tcx>(
hir::MatchSource::IfDesugar { .. } | hir::MatchSource::WhileDesugar => {
bug!()
}
hir::MatchSource::IfLetDesugar { .. } => {
cx.tcx.lint_hir(
lint::builtin::IRREFUTABLE_LET_PATTERNS,
hir_pat.hir_id,
pat.span,
"irrefutable if-let pattern",
);
}
hir::MatchSource::WhileLetDesugar => {
hir::MatchSource::IfLetDesugar { .. }
| hir::MatchSource::WhileLetDesugar => {
// check which arm we're on.
match arm_index {
// The arm with the user-specified pattern.
@ -437,11 +430,20 @@ fn check_arms<'p, 'tcx>(
}
// The arm with the wildcard pattern.
1 => {
let msg = match source {
hir::MatchSource::IfLetDesugar { .. } => {
"irrefutable if-let pattern"
}
hir::MatchSource::WhileLetDesugar => {
"irrefutable while-let pattern"
}
_ => bug!(),
};
cx.tcx.lint_hir(
lint::builtin::IRREFUTABLE_LET_PATTERNS,
hir_pat.hir_id,
pat.span,
"irrefutable while-let pattern",
msg,
);
}
_ => bug!(),

View File

@ -2,8 +2,7 @@
fn main() {
while let 0..=2 | 1 = 0 {} //~ ERROR unreachable pattern
if let 0..=2 | 1 = 0 {} //~ WARN irrefutable if-let pattern
// this one ^ is incorrect
if let 0..=2 | 1 = 0 {} //~ ERROR unreachable pattern
match 0u8 {
0

View File

@ -10,67 +10,65 @@ note: lint level defined here
LL | #![deny(unreachable_patterns)]
| ^^^^^^^^^^^^^^^^^^^^
warning: irrefutable if-let pattern
error: unreachable pattern
--> $DIR/top-level-alternation.rs:5:20
|
LL | if let 0..=2 | 1 = 0 {}
| ^
|
= note: `#[warn(irrefutable_let_patterns)]` on by default
error: unreachable pattern
--> $DIR/top-level-alternation.rs:10:15
--> $DIR/top-level-alternation.rs:9:15
|
LL | | 0 => {}
| ^
error: unreachable pattern
--> $DIR/top-level-alternation.rs:15:15
--> $DIR/top-level-alternation.rs:14:15
|
LL | | Some(0) => {}
| ^^^^^^^
error: unreachable pattern
--> $DIR/top-level-alternation.rs:20:9
--> $DIR/top-level-alternation.rs:19:9
|
LL | (0, 0) => {}
| ^^^^^^
error: unreachable pattern
--> $DIR/top-level-alternation.rs:40:9
--> $DIR/top-level-alternation.rs:39:9
|
LL | _ => {}
| ^
error: unreachable pattern
--> $DIR/top-level-alternation.rs:44:9
--> $DIR/top-level-alternation.rs:43:9
|
LL | Some(_) => {}
| ^^^^^^^
error: unreachable pattern
--> $DIR/top-level-alternation.rs:45:9
--> $DIR/top-level-alternation.rs:44:9
|
LL | None => {}
| ^^^^
error: unreachable pattern
--> $DIR/top-level-alternation.rs:50:9
--> $DIR/top-level-alternation.rs:49:9
|
LL | None
| ^^^^
error: unreachable pattern
--> $DIR/top-level-alternation.rs:51:15
--> $DIR/top-level-alternation.rs:50:15
|
LL | | Some(_) => {}
| ^^^^^^^
error: unreachable pattern
--> $DIR/top-level-alternation.rs:55:9
--> $DIR/top-level-alternation.rs:54:9
|
LL | 1..=2 => {},
| ^^^^^
error: aborting due to 10 previous errors
error: aborting due to 11 previous errors