Fix fn front matter parsing ICE from invalid code.

This commit fixes an "unreachable code" ICE that results from parsing
invalid code where the compiler is expecting the next trait item
declaration in the middle of the previous trait item due to extra
closing braces.
This commit is contained in:
David Wood 2019-04-20 11:31:38 +01:00
parent d6f513ec7d
commit 60c6ed9664
No known key found for this signature in database
GPG key ID: 01760B4F9F53F154
3 changed files with 55 additions and 1 deletions

View file

@ -6575,7 +6575,12 @@ impl<'a> Parser<'a> {
};
(respan(self.prev_span, Constness::NotConst), unsafety, abi)
};
self.expect_keyword(keywords::Fn)?;
if !self.eat_keyword(keywords::Fn) {
// It is possible for `expect_one_of` to recover given the contents of
// `self.expected_tokens`, therefore, do not use `self.unexpected()` which doesn't
// account for this.
if !self.expect_one_of(&[], &[])? { unreachable!() }
}
Ok((constness, unsafety, asyncness, abi))
}