diff options
| author | Michael Goulet <michael@errs.io> | 2022-11-04 21:16:20 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-11-04 21:35:58 +0000 |
| commit | 4e7fc663cc674a33cc7078096ad1b0269618c456 (patch) | |
| tree | c24495e83147d42d40e94f01c2519ce0539d78e4 /compiler/rustc_parse/src/parser | |
| parent | c2a5c3a50fc3fb6d16cd140f55f7db61cbf08a01 (diff) | |
| download | rust-4e7fc663cc674a33cc7078096ad1b0269618c456.tar.gz rust-4e7fc663cc674a33cc7078096ad1b0269618c456.zip | |
Don't silently eat label before block in block-like expr
Diffstat (limited to 'compiler/rustc_parse/src/parser')
| -rw-r--r-- | compiler/rustc_parse/src/parser/diagnostics.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 7dc4fd0044f..c609aa93da3 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -2468,11 +2468,15 @@ impl<'a> Parser<'a> { } pub(crate) fn maybe_recover_unexpected_block_label(&mut self) -> bool { - let Some(label) = self.eat_label().filter(|_| { - self.eat(&token::Colon) && self.token.kind == token::OpenDelim(Delimiter::Brace) - }) else { + // Check for `'a : {` + if !(self.check_lifetime() + && self.look_ahead(1, |tok| tok.kind == token::Colon) + && self.look_ahead(2, |tok| tok.kind == token::OpenDelim(Delimiter::Brace))) + { return false; - }; + } + let label = self.eat_label().expect("just checked if a label exists"); + self.bump(); // eat `:` let span = label.ident.span.to(self.prev_token.span); let mut err = self.struct_span_err(span, "block label not supported here"); err.span_label(span, "not supported here"); |
