diff options
| author | sjwang05 <63834813+sjwang05@users.noreply.github.com> | 2023-11-09 20:04:55 -0800 |
|---|---|---|
| committer | sjwang05 <63834813+sjwang05@users.noreply.github.com> | 2023-11-09 20:07:17 -0800 |
| commit | 9455259450f0186df991a14d960bb3759e7eac43 (patch) | |
| tree | e53c5c704067575d82245ce0b6ea6677507659c3 | |
| parent | 00942381575bc6c081835dbb38f68ce9603c032f (diff) | |
| download | rust-9455259450f0186df991a14d960bb3759e7eac43.tar.gz rust-9455259450f0186df991a14d960bb3759e7eac43.zip | |
Catch an edge case
| -rw-r--r-- | compiler/rustc_parse/src/lexer/tokentrees.rs | 6 | ||||
| -rw-r--r-- | tests/ui/parser/brace-in-let-chain.rs | 9 | ||||
| -rw-r--r-- | tests/ui/parser/brace-in-let-chain.stderr | 5 |
3 files changed, 18 insertions, 2 deletions
diff --git a/compiler/rustc_parse/src/lexer/tokentrees.rs b/compiler/rustc_parse/src/lexer/tokentrees.rs index 7aa4ac7c4cb..e7d2c678824 100644 --- a/compiler/rustc_parse/src/lexer/tokentrees.rs +++ b/compiler/rustc_parse/src/lexer/tokentrees.rs @@ -131,7 +131,11 @@ impl<'a> TokenTreesReader<'a> { diff_errs.push(diff_err); } else if parser.token.is_keyword(kw::If) { in_cond = true; - } else if parser.token == token::CloseDelim(Delimiter::Brace) { + } else if matches!( + parser.token.kind, + token::CloseDelim(Delimiter::Brace) | token::FatArrow + ) { + // end of the `if`/`while` body, or the end of a `match` guard in_cond = false; } else if in_cond && parser.token == token::OpenDelim(Delimiter::Brace) { // Store the `&&` and `let` to use their spans later when creating the diagnostic diff --git a/tests/ui/parser/brace-in-let-chain.rs b/tests/ui/parser/brace-in-let-chain.rs index 4dc13fb3847..78060e238d4 100644 --- a/tests/ui/parser/brace-in-let-chain.rs +++ b/tests/ui/parser/brace-in-let-chain.rs @@ -9,6 +9,15 @@ fn main() { } } +fn qux() { + let foo = false; + match foo { + _ if foo => { + && let () = () + _ => {} + } +} + fn foo() { { && let () = () diff --git a/tests/ui/parser/brace-in-let-chain.stderr b/tests/ui/parser/brace-in-let-chain.stderr index 7550d5c43cf..8e20cc43421 100644 --- a/tests/ui/parser/brace-in-let-chain.stderr +++ b/tests/ui/parser/brace-in-let-chain.stderr @@ -1,9 +1,12 @@ error: this file contains an unclosed delimiter - --> $DIR/brace-in-let-chain.rs:28:54 + --> $DIR/brace-in-let-chain.rs:37:54 | LL | fn main() { | - unclosed delimiter ... +LL | fn qux() { + | - unclosed delimiter +... LL | fn foo() { | - unclosed delimiter ... |
