diff options
| author | Michael Goulet <michael@errs.io> | 2024-05-09 10:47:07 -0400 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-05-09 10:47:14 -0400 |
| commit | dbdef68ddf0b8200954c81264400ef271a5f0194 (patch) | |
| tree | 2702c14ef694397c3873af037e3b4ef1b3f53ce8 | |
| parent | 6f7e00a3e6eade8350ce6280f05596236d73c4cb (diff) | |
| download | rust-dbdef68ddf0b8200954c81264400ef271a5f0194.tar.gz rust-dbdef68ddf0b8200954c81264400ef271a5f0194.zip | |
Make sure we consume a generic arg when checking mistyped turbofish
3 files changed, 25 insertions, 1 deletions
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index f256dbf4360..ccf3b82ff7a 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -1224,7 +1224,11 @@ impl<'a> Parser<'a> { let x = self.parse_seq_to_before_end( &token::Gt, SeqSep::trailing_allowed(token::Comma), - |p| p.parse_generic_arg(None), + |p| match p.parse_generic_arg(None)? { + Some(arg) => Ok(arg), + // If we didn't eat a generic arg, then we should error. + None => p.unexpected_any(), + }, ); match x { Ok((_, _, Recovered::No)) => { diff --git a/tests/ui/parser/recover/turbofish-arg-with-stray-colon.rs b/tests/ui/parser/recover/turbofish-arg-with-stray-colon.rs new file mode 100644 index 00000000000..32125211a91 --- /dev/null +++ b/tests/ui/parser/recover/turbofish-arg-with-stray-colon.rs @@ -0,0 +1,6 @@ +fn foo() { + let x = Tr<A, A:>; + //~^ ERROR expected one of `!`, `.`, `::`, `;`, `?`, `else`, `{`, or an operator, found `,` +} + +fn main() {} diff --git a/tests/ui/parser/recover/turbofish-arg-with-stray-colon.stderr b/tests/ui/parser/recover/turbofish-arg-with-stray-colon.stderr new file mode 100644 index 00000000000..551b2e3ff09 --- /dev/null +++ b/tests/ui/parser/recover/turbofish-arg-with-stray-colon.stderr @@ -0,0 +1,14 @@ +error: expected one of `!`, `.`, `::`, `;`, `?`, `else`, `{`, or an operator, found `,` + --> $DIR/turbofish-arg-with-stray-colon.rs:2:17 + | +LL | let x = Tr<A, A:>; + | ^ expected one of 8 possible tokens + | + = note: type ascription syntax has been removed, see issue #101728 <https://github.com/rust-lang/rust/issues/101728> +help: maybe write a path separator here + | +LL | let x = Tr<A, A::>; + | ~~ + +error: aborting due to 1 previous error + |
