Fix ICE when misplaced visibility cannot be properly parsed

This commit is contained in:
Ryan Levick 2021-07-07 14:25:40 +02:00
parent c5e344f774
commit 04a9c10fc2
3 changed files with 18 additions and 1 deletions

View File

@ -1791,7 +1791,13 @@ impl<'a> Parser<'a> {
if self.check_keyword(kw::Pub) { if self.check_keyword(kw::Pub) {
let sp = sp_start.to(self.prev_token.span); let sp = sp_start.to(self.prev_token.span);
if let Ok(snippet) = self.span_to_snippet(sp) { if let Ok(snippet) = self.span_to_snippet(sp) {
let vis = self.parse_visibility(FollowedByType::No)?; let vis = match self.parse_visibility(FollowedByType::No) {
Ok(v) => v,
Err(mut d) => {
d.cancel();
return Err(err);
}
};
let vs = pprust::vis_to_string(&vis); let vs = pprust::vis_to_string(&vis);
let vs = vs.trim_end(); let vs = vs.trim_end();
err.span_suggestion( err.span_suggestion(

View File

@ -0,0 +1,3 @@
const pub () {}
//~^ ERROR expected one of `async`, `extern`, `fn`, or `unsafe`
pub fn main() {}

View File

@ -0,0 +1,8 @@
error: expected one of `async`, `extern`, `fn`, or `unsafe`, found keyword `pub`
--> $DIR/issue-86895.rs:1:7
|
LL | const pub () {}
| ^^^ expected one of `async`, `extern`, `fn`, or `unsafe`
error: aborting due to previous error