Skip to content

Commit

Permalink
Auto merge of #68633 - JohnTitor:avoid-ice-in-diagnostics, r=estebank
Browse files Browse the repository at this point in the history
Avoid ICE in macro's diagnostics

Fixes #68629

r? @estebank
  • Loading branch information
bors committed Jan 31, 2020
2 parents cd1ef39 + b1c91ee commit cdd41ea
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 22 deletions.
40 changes: 23 additions & 17 deletions src/librustc_parse/parser/item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1638,26 +1638,32 @@ impl<'a> Parser<'a> {
.span_to_snippet(self.prev_span)
.map(|s| s.ends_with(")") || s.ends_with("]"))
.unwrap_or(false);
let right_brace_span = if has_close_delim {
// it's safe to peel off one character only when it has the close delim
self.prev_span.with_lo(self.prev_span.hi() - BytePos(1))
} else {
self.prev_span.shrink_to_hi()
};

self.struct_span_err(
let mut err = self.struct_span_err(
self.prev_span,
"macros that expand to items must be delimited with braces or followed by a semicolon",
)
.multipart_suggestion(
"change the delimiters to curly braces",
vec![
(self.prev_span.with_hi(self.prev_span.lo() + BytePos(1)), "{".to_string()),
(right_brace_span, '}'.to_string()),
],
Applicability::MaybeIncorrect,
)
.span_suggestion(
);

// To avoid ICE, we shouldn't emit actual suggestions when it hasn't closing delims
if has_close_delim {
err.multipart_suggestion(
"change the delimiters to curly braces",
vec![
(self.prev_span.with_hi(self.prev_span.lo() + BytePos(1)), '{'.to_string()),
(self.prev_span.with_lo(self.prev_span.hi() - BytePos(1)), '}'.to_string()),
],
Applicability::MaybeIncorrect,
);
} else {
err.span_suggestion(
self.prev_span,
"change the delimiters to curly braces",
" { /* items */ }".to_string(),
Applicability::HasPlaceholders,
);
}

err.span_suggestion(
self.prev_span.shrink_to_hi(),
"add a semicolon",
';'.to_string(),
Expand Down
5 changes: 2 additions & 3 deletions src/test/ui/parser/issue-62524.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,8 @@ LL | | Ϥ,
|
help: change the delimiters to curly braces
|
LL | y!{
LL | Ϥ}
|
LL | y! { /* items */ }
| ^^^^^^^^^^^^^^^
help: add a semicolon
|
LL | Ϥ,;
Expand Down
Binary file added src/test/ui/parser/issue-68629.rs
Binary file not shown.
Binary file added src/test/ui/parser/issue-68629.stderr
Binary file not shown.
4 changes: 2 additions & 2 deletions src/test/ui/parser/mbe_missing_right_paren.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ LL | macro_rules! abc(ؼ
|
help: change the delimiters to curly braces
|
LL | macro_rules! abc}
| ^ ^
LL | macro_rules! abc { /* items */ }
| ^^^^^^^^^^^^^^^
help: add a semicolon
|
LL | macro_rules! abc(ؼ;
Expand Down

0 comments on commit cdd41ea

Please sign in to comment.