mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Allow for reparsing failure when reparsing a pasted metavar.
Fixes #139445. The additional errors aren't great but the first one is still good and it's the most important, and imperfect errors are better than ICEing.
This commit is contained in:
parent
eb5d8923fc
commit
e177921ae9
@ -782,9 +782,16 @@ impl<'a> Parser<'a> {
|
||||
// Recovery is disabled when parsing macro arguments, so it must
|
||||
// also be disabled when reparsing pasted macro arguments,
|
||||
// otherwise we get inconsistent results (e.g. #137874).
|
||||
let res = self.with_recovery(Recovery::Forbidden, |this| {
|
||||
f(this).expect("failed to reparse {mv_kind:?}")
|
||||
});
|
||||
let res = self.with_recovery(Recovery::Forbidden, |this| f(this));
|
||||
|
||||
let res = match res {
|
||||
Ok(res) => res,
|
||||
Err(err) => {
|
||||
// This can occur in unusual error cases, e.g. #139445.
|
||||
err.delay_as_bug();
|
||||
return None;
|
||||
}
|
||||
};
|
||||
|
||||
if let token::CloseDelim(delim) = self.token.kind
|
||||
&& let Delimiter::Invisible(InvisibleOrigin::MetaVar(mv_kind)) = delim
|
||||
|
6
tests/ui/macros/failed-to-reparse-issue-139445.rs
Normal file
6
tests/ui/macros/failed-to-reparse-issue-139445.rs
Normal file
@ -0,0 +1,6 @@
|
||||
fn main() {
|
||||
assert_eq!(3, 'a,)
|
||||
//~^ ERROR expected `while`, `for`, `loop` or `{` after a label
|
||||
//~| ERROR expected `while`, `for`, `loop` or `{` after a label
|
||||
//~| ERROR expected expression, found ``
|
||||
}
|
24
tests/ui/macros/failed-to-reparse-issue-139445.stderr
Normal file
24
tests/ui/macros/failed-to-reparse-issue-139445.stderr
Normal file
@ -0,0 +1,24 @@
|
||||
error: expected `while`, `for`, `loop` or `{` after a label
|
||||
--> $DIR/failed-to-reparse-issue-139445.rs:2:21
|
||||
|
|
||||
LL | assert_eq!(3, 'a,)
|
||||
| ^ expected `while`, `for`, `loop` or `{` after a label
|
||||
|
||||
error: expected `while`, `for`, `loop` or `{` after a label
|
||||
--> $DIR/failed-to-reparse-issue-139445.rs:2:5
|
||||
|
|
||||
LL | assert_eq!(3, 'a,)
|
||||
| ^^^^^^^^^^^^^^^^^^ expected `while`, `for`, `loop` or `{` after a label
|
||||
|
|
||||
= note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: expected expression, found ``
|
||||
--> $DIR/failed-to-reparse-issue-139445.rs:2:5
|
||||
|
|
||||
LL | assert_eq!(3, 'a,)
|
||||
| ^^^^^^^^^^^^^^^^^^ expected expression
|
||||
|
|
||||
= note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
Loading…
Reference in New Issue
Block a user