From 62ded071d588b92b394c4561d19d517d87074728 Mon Sep 17 00:00:00 2001 From: Takayuki Maeda Date: Tue, 22 Mar 2022 16:06:56 +0900 Subject: [PATCH] cancel a not emitted error after parsing const generic args --- compiler/rustc_parse/src/parser/path.rs | 12 ++++++++---- .../ice-const-generic-function-return-ty.rs | 5 +++++ .../ice-const-generic-function-return-ty.stderr | 8 ++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 src/test/ui/const-generics/ice-const-generic-function-return-ty.rs create mode 100644 src/test/ui/const-generics/ice-const-generic-function-return-ty.stderr diff --git a/compiler/rustc_parse/src/parser/path.rs b/compiler/rustc_parse/src/parser/path.rs index 17c57867cf9..07ce879de8f 100644 --- a/compiler/rustc_parse/src/parser/path.rs +++ b/compiler/rustc_parse/src/parser/path.rs @@ -630,10 +630,14 @@ impl<'a> Parser<'a> { Ok(ty) => GenericArg::Type(ty), Err(err) => { if is_const_fn { - if let Ok(expr) = (*snapshot).parse_expr_res(Restrictions::CONST_EXPR, None) - { - self.restore_snapshot(snapshot); - return Ok(Some(self.dummy_const_arg_needs_braces(err, expr.span))); + match (*snapshot).parse_expr_res(Restrictions::CONST_EXPR, None) { + Ok(expr) => { + self.restore_snapshot(snapshot); + return Ok(Some(self.dummy_const_arg_needs_braces(err, expr.span))); + } + Err(err) => { + err.cancel(); + } } } // Try to recover from possible `const` arg without braces. diff --git a/src/test/ui/const-generics/ice-const-generic-function-return-ty.rs b/src/test/ui/const-generics/ice-const-generic-function-return-ty.rs new file mode 100644 index 00000000000..2bf628af8a7 --- /dev/null +++ b/src/test/ui/const-generics/ice-const-generic-function-return-ty.rs @@ -0,0 +1,5 @@ +// #95163 +fn return_ty() -> impl Into<<() as Reexported; +//~^ ERROR expected one of `(`, `::`, `<`, or `>`, found `;` + +fn main() {} diff --git a/src/test/ui/const-generics/ice-const-generic-function-return-ty.stderr b/src/test/ui/const-generics/ice-const-generic-function-return-ty.stderr new file mode 100644 index 00000000000..a72f5800a07 --- /dev/null +++ b/src/test/ui/const-generics/ice-const-generic-function-return-ty.stderr @@ -0,0 +1,8 @@ +error: expected one of `(`, `::`, `<`, or `>`, found `;` + --> $DIR/ice-const-generic-function-return-ty.rs:2:46 + | +LL | fn return_ty() -> impl Into<<() as Reexported; + | ^ expected one of `(`, `::`, `<`, or `>` + +error: aborting due to previous error +