about summary refs log tree commit diff
path: root/compiler/rustc_parse/src/parser/expr.rs
diff options
context:
space:
mode:
authorLieselotte <52315535+she3py@users.noreply.github.com>2023-12-28 15:02:17 +0100
committerLieselotte <52315535+she3py@users.noreply.github.com>2023-12-28 15:02:17 +0100
commit7d6cd6bf1f780a7ce8487daa27eae82fd60bfcd7 (patch)
tree78d3d5f928cbd1464e6cd05a7e66588405eaf94c /compiler/rustc_parse/src/parser/expr.rs
parentf4d794ea0b845413344621d89f6c945062748485 (diff)
downloadrust-7d6cd6bf1f780a7ce8487daa27eae82fd60bfcd7.tar.gz
rust-7d6cd6bf1f780a7ce8487daa27eae82fd60bfcd7.zip
Don't expect bodyless arms if the pattern can never be a never pattern
Diffstat (limited to 'compiler/rustc_parse/src/parser/expr.rs')
-rw-r--r--compiler/rustc_parse/src/parser/expr.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs
index 73bd19f34c1..bf6151b64d3 100644
--- a/compiler/rustc_parse/src/parser/expr.rs
+++ b/compiler/rustc_parse/src/parser/expr.rs
@@ -2937,7 +2937,13 @@ impl<'a> Parser<'a> {
             let is_almost_fat_arrow = TokenKind::FatArrow
                 .similar_tokens()
                 .is_some_and(|similar_tokens| similar_tokens.contains(&this.token.kind));
-            let mut result = if !is_fat_arrow && !is_almost_fat_arrow {
+
+            // this avoids the compiler saying that a `,` or `}` was expected even though
+            // the pattern isn't a never pattern (and thus an arm body is required)
+            let armless = (!is_fat_arrow && !is_almost_fat_arrow && pat.could_be_never_pattern())
+                || matches!(this.token.kind, token::Comma | token::CloseDelim(Delimiter::Brace));
+
+            let mut result = if armless {
                 // A pattern without a body, allowed for never patterns.
                 arm_body = None;
                 this.expect_one_of(&[token::Comma], &[token::CloseDelim(Delimiter::Brace)]).map(