Skip to content

Commit

Permalink
Rollup merge of rust-lang#91575 - compiler-errors:issue-91556, r=cjgi…
Browse files Browse the repository at this point in the history
…llot

Fix ICE on format string of macro with secondary-label

This generalizes the fix rust-lang#86104 to also correctly skip `Span::from_inner` for the `secondary_label` of a format macro parsing error as well.

We can alternatively skip the `span_label` diagnostic call for the secondary label as well, since that label probably only makes sense when the _proper_ span is computed.

Fixes rust-lang#91556
  • Loading branch information
matthiaskrgr authored Dec 10, 2021
2 parents 6a8c55a + 99bd24e commit d2d0b0b
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 2 deletions.
5 changes: 3 additions & 2 deletions compiler/rustc_builtin_macros/src/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -995,8 +995,9 @@ pub fn expand_preparsed_format_args(
e.note(&note);
}
if let Some((label, span)) = err.secondary_label {
let sp = fmt_span.from_inner(span);
e.span_label(sp, label);
if efmt_kind_is_lit {
e.span_label(fmt_span.from_inner(span), label);
}
}
e.emit();
return DummyResult::raw_expr(sp, true);
Expand Down
8 changes: 8 additions & 0 deletions src/test/ui/fmt/issue-91556.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
fn main() {
let _ = format!(concat!("{0}π–³π–Ύπ—Œπ—{"), i);
//~^ ERROR: invalid format string: expected `'}'` but string was terminated
//~| NOTE: if you intended to print `{`, you can escape it using `{{`
//~| NOTE: in this expansion of concat!
//~| NOTE: in this expansion of concat!
//~| NOTE: expected `'}'` in format string
}
11 changes: 11 additions & 0 deletions src/test/ui/fmt/issue-91556.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
error: invalid format string: expected `'}'` but string was terminated
--> $DIR/issue-91556.rs:2:19
|
LL | let _ = format!(concat!("{0}π–³π–Ύπ—Œπ—{"), i);
| ^^^^^^^^^^^^^^^^^^^ expected `'}'` in format string
|
= note: if you intended to print `{`, you can escape it using `{{`
= note: this error originates in the macro `concat` (in Nightly builds, run with -Z macro-backtrace for more info)

error: aborting due to previous error

0 comments on commit d2d0b0b

Please sign in to comment.