diff options
| author | Michael Goulet <michael@errs.io> | 2024-04-02 18:31:42 -0400 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-04-02 18:31:42 -0400 |
| commit | 9d116e8e188a84d97e1b64f54410fda7ec6f2dc6 (patch) | |
| tree | 662f2bae190b9ca28683f9b541b6506149051446 | |
| parent | 36b6f9b58e78a1225a322a759e42c262e6dc8d5d (diff) | |
| download | rust-9d116e8e188a84d97e1b64f54410fda7ec6f2dc6.tar.gz rust-9d116e8e188a84d97e1b64f54410fda7ec6f2dc6.zip | |
Don't ICE for postfix match after as
| -rw-r--r-- | compiler/rustc_parse/src/parser/expr.rs | 1 | ||||
| -rw-r--r-- | tests/ui/match/postfix-match/match-after-as.rs | 7 | ||||
| -rw-r--r-- | tests/ui/match/postfix-match/match-after-as.stderr | 28 |
3 files changed, 36 insertions, 0 deletions
diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs index 18fb858c84c..012285e4644 100644 --- a/compiler/rustc_parse/src/parser/expr.rs +++ b/compiler/rustc_parse/src/parser/expr.rs @@ -860,6 +860,7 @@ impl<'a> Parser<'a> { ExprKind::MethodCall(_) => "a method call", ExprKind::Call(_, _) => "a function call", ExprKind::Await(_, _) => "`.await`", + ExprKind::Match(_, _, MatchKind::Postfix) => "a postfix match", ExprKind::Err(_) => return Ok(with_postfix), _ => unreachable!("parse_dot_or_call_expr_with_ shouldn't produce this"), } diff --git a/tests/ui/match/postfix-match/match-after-as.rs b/tests/ui/match/postfix-match/match-after-as.rs new file mode 100644 index 00000000000..7c648bfcf03 --- /dev/null +++ b/tests/ui/match/postfix-match/match-after-as.rs @@ -0,0 +1,7 @@ +#![feature(postfix_match)] + +fn main() { + 1 as i32.match {}; + //~^ ERROR cast cannot be followed by a postfix match + //~| ERROR non-exhaustive patterns +} diff --git a/tests/ui/match/postfix-match/match-after-as.stderr b/tests/ui/match/postfix-match/match-after-as.stderr new file mode 100644 index 00000000000..99e42991c52 --- /dev/null +++ b/tests/ui/match/postfix-match/match-after-as.stderr @@ -0,0 +1,28 @@ +error: cast cannot be followed by a postfix match + --> $DIR/match-after-as.rs:4:5 + | +LL | 1 as i32.match {}; + | ^^^^^^^^ + | +help: try surrounding the expression in parentheses + | +LL | (1 as i32).match {}; + | + + + +error[E0004]: non-exhaustive patterns: type `i32` is non-empty + --> $DIR/match-after-as.rs:4:5 + | +LL | 1 as i32.match {}; + | ^^^^^^^^ + | + = note: the matched value is of type `i32` +help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown + | +LL ~ 1 as i32 { +LL + _ => todo!(), +LL ~ }; + | + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0004`. |
