Skip to content

Commit

Permalink
Don't drop DiagnosticBuilder if parsing fails
Browse files Browse the repository at this point in the history
If the explicitly given type of a `self` parameter fails to parse correctly,
we need to propagate the error rather than dropping it and causing an ICE.

Fixes rust-lang#62660.
  • Loading branch information
goodmanjonathan committed Jul 14, 2019
1 parent 69656fa commit 7111328
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1498,7 +1498,7 @@ impl<'a> Parser<'a> {
F: Fn(&token::Token) -> bool
{
let attrs = self.parse_arg_attributes()?;
if let Ok(Some(mut arg)) = self.parse_self_arg() {
if let Some(mut arg) = self.parse_self_arg()? {
arg.attrs = attrs.into();
return self.recover_bad_self_arg(arg, is_trait_item);
}
Expand Down
11 changes: 11 additions & 0 deletions src/test/ui/parser/issue-62660.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Regression test for issue #62660: if a receiver's type does not
// successfully parse, emit the correct error instead of ICE-ing the compiler.

struct Foo;

impl Foo {
pub fn foo(_: i32, self: Box<Self) {}
//~^ ERROR expected one of `!`, `(`, `+`, `,`, `::`, `<`, or `>`, found `)`
}

fn main() {}
8 changes: 8 additions & 0 deletions src/test/ui/parser/issue-62660.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: expected one of `!`, `(`, `+`, `,`, `::`, `<`, or `>`, found `)`
--> $DIR/issue-62660.rs:7:38
|
LL | pub fn foo(_: i32, self: Box<Self) {}
| ^ expected one of 7 possible tokens here

error: aborting due to previous error

0 comments on commit 7111328

Please sign in to comment.