restore snapshot when parse_param_general

This commit is contained in:
Mu001999 2023-10-28 08:53:51 +08:00
parent 64338796ab
commit fe00cfef57
3 changed files with 26 additions and 0 deletions

View file

@ -2494,9 +2494,11 @@ pub(super) fn parse_fn_params(&mut self, req_name: ReqName) -> PResult<'a, ThinV
// Parse the arguments, starting out with `self` being allowed...
let (mut params, _) = self.parse_paren_comma_seq(|p| {
p.recover_diff_marker();
let snapshot = p.create_snapshot_for_diagnostic();
let param = p.parse_param_general(req_name, first_param).or_else(|mut e| {
e.emit();
let lo = p.prev_token.span;
p.restore_snapshot(snapshot);
// Skip every token until next possible arg or end.
p.eat_to_tokens(&[&token::Comma, &token::CloseDelim(Delimiter::Parenthesis)]);
// Create a placeholder argument for proper arg count (issue #34264).

View file

@ -0,0 +1,8 @@
#[derive(Debug)]
struct Foo {
#[cfg(all())]
field: fn(($),), //~ ERROR expected pattern, found `$`
//~^ ERROR expected pattern, found `$`
}
fn main() {}

View file

@ -0,0 +1,16 @@
error: expected pattern, found `$`
--> $DIR/issue-116781.rs:4:16
|
LL | field: fn(($),),
| ^ expected pattern
error: expected pattern, found `$`
--> $DIR/issue-116781.rs:4:16
|
LL | field: fn(($),),
| ^ expected pattern
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: aborting due to 2 previous errors