cancel a not emitted error after parsing const generic args

This commit is contained in:
Takayuki Maeda 2022-03-22 16:06:56 +09:00
parent 2d15732f6e
commit 62ded071d5
3 changed files with 21 additions and 4 deletions

View File

@ -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.

View File

@ -0,0 +1,5 @@
// #95163
fn return_ty() -> impl Into<<() as Reexported;
//~^ ERROR expected one of `(`, `::`, `<`, or `>`, found `;`
fn main() {}

View File

@ -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