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 authored Jul 7, 2021
2 parents 8445192 + 04a9c10 commit de403ef
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 de403ef

Please sign in to comment.