diff options
author | yukang <moorekang@gmail.com> | 2023-05-08 11:16:17 +0800 |
---|---|---|
committer | yukang <moorekang@gmail.com> | 2023-05-08 11:16:17 +0800 |
commit | a7fc32ceaf4708a26a992f61c4ac4ead1555c8eb (patch) | |
tree | e3a76ce24226fc2a5ed7111901d270b30ee6cda6 | |
parent | 20e6e6a4932991c4b53605154868cfa645b04998 (diff) | |
download | rust-a7fc32ceaf4708a26a992f61c4ac4ead1555c8eb.tar.gz |
fix ice in suggesting
-rw-r--r-- | compiler/rustc_parse/src/parser/diagnostics.rs | 21 | ||||
-rw-r--r-- | tests/ui/type/missing-let-in-binding-3.rs | 5 | ||||
-rw-r--r-- | tests/ui/type/missing-let-in-binding-3.stderr | 10 |
3 files changed, 29 insertions, 7 deletions
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index bd0ea50b4d8..456c6243bbb 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -405,13 +405,20 @@ impl<'a> Parser<'a> { let prev_span = self.prev_token.span.shrink_to_lo(); let snapshot = self.create_snapshot_for_diagnostic(); self.bump(); - if self.parse_ty().is_ok() && self.token == token::Eq { - err.span_suggestion_verbose( - prev_span, - "you might have meant to introduce a new binding", - "let ".to_string(), - Applicability::MaybeIncorrect, - ); + match self.parse_ty() { + Ok(_) => { + if self.token == token::Eq { + err.span_suggestion_verbose( + prev_span, + "you might have meant to introduce a new binding", + "let ".to_string(), + Applicability::MaybeIncorrect, + ); + } + } + Err(err) => { + err.cancel(); + } } self.restore_snapshot(snapshot); } diff --git a/tests/ui/type/missing-let-in-binding-3.rs b/tests/ui/type/missing-let-in-binding-3.rs new file mode 100644 index 00000000000..d56b1393336 --- /dev/null +++ b/tests/ui/type/missing-let-in-binding-3.rs @@ -0,0 +1,5 @@ +struct A { + : :u8, //~ ERROR expected identifier, found `:` +} + +fn main() {} diff --git a/tests/ui/type/missing-let-in-binding-3.stderr b/tests/ui/type/missing-let-in-binding-3.stderr new file mode 100644 index 00000000000..ca828ce37eb --- /dev/null +++ b/tests/ui/type/missing-let-in-binding-3.stderr @@ -0,0 +1,10 @@ +error: expected identifier, found `:` + --> $DIR/missing-let-in-binding-3.rs:2:5 + | +LL | struct A { + | - while parsing this struct +LL | : :u8, + | ^ expected identifier + +error: aborting due to previous error + |