Skip to content

Commit

Permalink
Rollup merge of rust-lang#86932 - rylev:fix-ice-86895, r=estebank
Browse files Browse the repository at this point in the history
Fix ICE when misplaced visibility cannot be properly parsed

Fixes rust-lang#86895

The issue was that a failure to parse the visibility was causing the original error to be dropped before being emitted.

The resulting error isn't quite as nice as when the visibility is parsed properly, but I'm not sure which error to prioritize here. Displaying both errors might be too confusing.

r? `@estebank`
  • Loading branch information
JohnTitor committed Jul 7, 2021
2 parents a0feadb + 04a9c10 commit 01a8405
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 1 deletion.
8 changes: 7 additions & 1 deletion compiler/rustc_parse/src/parser/item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1791,7 +1791,13 @@ impl<'a> Parser<'a> {
if self.check_keyword(kw::Pub) {
let sp = sp_start.to(self.prev_token.span);
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 = vs.trim_end();
err.span_suggestion(
Expand Down
3 changes: 3 additions & 0 deletions src/test/ui/parser/issue-86895.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const pub () {}
//~^ ERROR expected one of `async`, `extern`, `fn`, or `unsafe`
pub fn main() {}
8 changes: 8 additions & 0 deletions src/test/ui/parser/issue-86895.stderr
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 01a8405

Please sign in to comment.