Fix duplicate labels emitted in render_multispan_macro_backtrace()

Using hash set instead of vec to weed out duplicates
This commit is contained in:
Gurinder Singh 2023-10-19 08:03:40 +05:30
parent 9ace9da2e0
commit 0091166b57
5 changed files with 13 additions and 46 deletions

View File

@ -23,7 +23,7 @@ use crate::{
use rustc_lint_defs::pluralize; use rustc_lint_defs::pluralize;
use derive_setters::Setters; 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_data_structures::sync::{DynSend, IntoDynSyncSend, Lrc};
use rustc_error_messages::{FluentArgs, SpanLabel}; use rustc_error_messages::{FluentArgs, SpanLabel};
use rustc_span::hygiene::{ExpnKind, MacroKind}; use rustc_span::hygiene::{ExpnKind, MacroKind};
@ -370,7 +370,7 @@ pub trait Emitter: Translate {
} }
fn render_multispan_macro_backtrace(&self, span: &mut MultiSpan, always_backtrace: bool) { 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() { for &sp in span.primary_spans() {
if sp.is_dummy() { if sp.is_dummy() {
@ -387,7 +387,7 @@ pub trait Emitter: Translate {
} }
if always_backtrace { if always_backtrace {
new_labels.push(( new_labels.insert((
trace.def_site, trace.def_site,
format!( format!(
"in this expansion of `{}`{}", "in this expansion of `{}`{}",
@ -431,7 +431,7 @@ pub trait Emitter: Translate {
format!("this {} desugaring", kind.descr()).into() format!("this {} desugaring", kind.descr()).into()
} }
}; };
new_labels.push(( new_labels.insert((
trace.call_site, trace.call_site,
format!( format!(
"in {}{}", "in {}{}",

View File

@ -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 | / m!(in out lateout inout inlateout const sym
LL | | pure nomem readonly preserves_flags LL | | pure nomem readonly preserves_flags
LL | | noreturn nostack options); LL | | noreturn nostack 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) = note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)

View File

@ -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 | / m!(in out lateout inout inlateout const sym
LL | | pure nomem readonly preserves_flags LL | | pure nomem readonly preserves_flags
LL | | noreturn nostack att_syntax options); 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) = note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)

View File

@ -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); 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) = note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
help: remove these bounds help: remove these bounds

View File

@ -7,10 +7,7 @@ LL | ($variant:tt) => (if let EnumUnit::$variant::<i32, u32> {} = 5 { true }
| not allowed on this type | not allowed on this type
... ...
LL | recursive_tt!(); LL | recursive_tt!();
| --------------- | --------------- in this macro invocation
| |
| in this macro invocation
| in this macro invocation
| |
= note: enum variants can't have type parameters = 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) = note: this error originates in the macro `recursive_tt` (in Nightly builds, run with -Z macro-backtrace for more info)
@ -44,10 +41,7 @@ LL | ($variant:ident) => (if let EnumUnit::$variant::<i32, u32> {} = 5 { tru
| ^^^ ^^^ type argument not allowed | ^^^ ^^^ type argument not allowed
... ...
LL | recursive_ident!(); LL | recursive_ident!();
| ------------------ | ------------------ in this macro invocation
| |
| in this macro invocation
| in this macro invocation
| |
= note: enum variants can't have type parameters = 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) = note: this error originates in the macro `recursive_ident` (in Nightly builds, run with -Z macro-backtrace for more info)
@ -81,10 +75,7 @@ LL | ($variant:tt) => (if let EnumUnit::$variant::<i32, u32> {} = 5 { true }
| not allowed on this type | not allowed on this type
... ...
LL | nested1_tt!(); LL | nested1_tt!();
| ------------- | ------------- in this macro invocation
| |
| in this macro invocation
| in this macro invocation
| |
= note: enum variants can't have type parameters = 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) = 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)
@ -119,10 +110,7 @@ LL | ($variant:ident) => (if let EnumUnit::$variant::<i32, u32> {} = 5 { tru
| ^^^ ^^^ type argument not allowed | ^^^ ^^^ type argument not allowed
... ...
LL | nested1_ident!(); LL | nested1_ident!();
| ---------------- | ---------------- in this macro invocation
| |
| in this macro invocation
| in this macro invocation
| |
= note: enum variants can't have type parameters = 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) = 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)
@ -156,10 +144,7 @@ LL | ($arg1:tt, $arg2:tt) => (if let EnumUnit::VariantB::<$arg1, $arg2> {}
| not allowed on this type | not allowed on this type
... ...
LL | nested1_tt_args_in_first_macro!(); 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: 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) = note: this error originates in the macro `nested1_tt_args_in_first_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
@ -194,10 +179,7 @@ LL | ($arg1:ident, $arg2:ident) => (if let EnumUnit::VariantB::<$arg1, $arg2
| not allowed on this type | not allowed on this type
... ...
LL | nested1_ident_args_in_first_macro!(); 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: 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) = 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)