Skip to content

Commit

Permalink
Rollup merge of rust-lang#116838 - gurry:116836-dup-macro-invoc-diag,…
Browse files Browse the repository at this point in the history
… r=petrochenkov

Fix duplicate labels emitted in `render_multispan_macro_backtrace()`

This PR replaces the `Vec` used to store labels with an `FxIndexSet` in order to eliminate duplicates

Fixes rust-lang#116836
  • Loading branch information
matthiaskrgr authored Oct 17, 2023
2 parents dbbe6e5 + 88c8714 commit 19d100b
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 40 deletions.
8 changes: 4 additions & 4 deletions compiler/rustc_errors/src/emitter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use crate::{
use rustc_lint_defs::pluralize;

use derive_setters::Setters;
use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
use rustc_data_structures::fx::{FxHashMap, FxIndexMap, FxIndexSet};
use rustc_data_structures::sync::{DynSend, IntoDynSyncSend, Lrc};
use rustc_error_messages::{FluentArgs, SpanLabel};
use rustc_span::hygiene::{ExpnKind, MacroKind};
Expand Down Expand Up @@ -370,7 +370,7 @@ pub trait Emitter: Translate {
}

fn render_multispan_macro_backtrace(&self, span: &mut MultiSpan, always_backtrace: bool) {
let mut new_labels: Vec<(Span, String)> = vec![];
let mut new_labels = FxIndexSet::default();

for &sp in span.primary_spans() {
if sp.is_dummy() {
Expand All @@ -387,7 +387,7 @@ pub trait Emitter: Translate {
}

if always_backtrace {
new_labels.push((
new_labels.insert((
trace.def_site,
format!(
"in this expansion of `{}`{}",
Expand Down Expand Up @@ -431,7 +431,7 @@ pub trait Emitter: Translate {
format!("this {} desugaring", kind.descr()).into()
}
};
new_labels.push((
new_labels.insert((
trace.call_site,
format!(
"in {}{}",
Expand Down
7 changes: 1 addition & 6 deletions tests/ui/asm/x86_64/interpolated-idents.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,7 @@ LL | asm!("", $in(x) x, $out(x) x, $lateout(x) x, $inout(x) x, $in
LL | / m!(in out lateout inout inlateout const sym
LL | | pure nomem readonly preserves_flags
LL | | noreturn nostack att_syntax options);
| | -
| |___________________________________________|
| |___________________________________________in this macro invocation
| |___________________________________________in this macro invocation
| |___________________________________________in this macro invocation
| in this macro invocation
| |___________________________________________- in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -861,12 +861,7 @@ LL | $($name: 'a, $name: 'a, )+;
| ^^^^^^^^^ ^^^^^^^^^
...
LL | m!(T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 T15);
| ---------------------------------------------------------
| |
| in this macro invocation
| in this macro invocation
| in this macro invocation
| in this macro invocation
| --------------------------------------------------------- in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
help: remove these bounds
Expand Down
30 changes: 6 additions & 24 deletions tests/ui/typeck/issue-116473-ice-wrong-span-variant-args.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@ LL | ($variant:tt) => (if let EnumUnit::$variant::<i32, u32> {} = 5 { true }
| not allowed on this type
...
LL | recursive_tt!();
| ---------------
| |
| in this macro invocation
| in this macro invocation
| --------------- in this macro invocation
|
= note: enum variants can't have type parameters
= note: this error originates in the macro `recursive_tt` (in Nightly builds, run with -Z macro-backtrace for more info)
Expand Down Expand Up @@ -44,10 +41,7 @@ LL | ($variant:ident) => (if let EnumUnit::$variant::<i32, u32> {} = 5 { tru
| ^^^ ^^^ type argument not allowed
...
LL | recursive_ident!();
| ------------------
| |
| in this macro invocation
| in this macro invocation
| ------------------ in this macro invocation
|
= note: enum variants can't have type parameters
= note: this error originates in the macro `recursive_ident` (in Nightly builds, run with -Z macro-backtrace for more info)
Expand Down Expand Up @@ -81,10 +75,7 @@ LL | ($variant:tt) => (if let EnumUnit::$variant::<i32, u32> {} = 5 { true }
| not allowed on this type
...
LL | nested1_tt!();
| -------------
| |
| in this macro invocation
| in this macro invocation
| ------------- in this macro invocation
|
= note: enum variants can't have type parameters
= note: this error originates in the macro `nested2_tt` which comes from the expansion of the macro `nested1_tt` (in Nightly builds, run with -Z macro-backtrace for more info)
Expand Down Expand Up @@ -119,10 +110,7 @@ LL | ($variant:ident) => (if let EnumUnit::$variant::<i32, u32> {} = 5 { tru
| ^^^ ^^^ type argument not allowed
...
LL | nested1_ident!();
| ----------------
| |
| in this macro invocation
| in this macro invocation
| ---------------- in this macro invocation
|
= note: enum variants can't have type parameters
= note: this error originates in the macro `nested2_ident` which comes from the expansion of the macro `nested1_ident` (in Nightly builds, run with -Z macro-backtrace for more info)
Expand Down Expand Up @@ -156,10 +144,7 @@ LL | ($arg1:tt, $arg2:tt) => (if let EnumUnit::VariantB::<$arg1, $arg2> {}
| not allowed on this type
...
LL | nested1_tt_args_in_first_macro!();
| ---------------------------------
| |
| in this macro invocation
| in this macro invocation
| --------------------------------- in this macro invocation
|
= note: enum variants can't have type parameters
= note: this error originates in the macro `nested1_tt_args_in_first_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
Expand Down Expand Up @@ -194,10 +179,7 @@ LL | ($arg1:ident, $arg2:ident) => (if let EnumUnit::VariantB::<$arg1, $arg2
| not allowed on this type
...
LL | nested1_ident_args_in_first_macro!();
| ------------------------------------
| |
| in this macro invocation
| in this macro invocation
| ------------------------------------ in this macro invocation
|
= note: enum variants can't have type parameters
= note: this error originates in the macro `nested2_ident_args_in_first_macro` which comes from the expansion of the macro `nested1_ident_args_in_first_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
Expand Down

0 comments on commit 19d100b

Please sign in to comment.