Rollup merge of #125135 - chenyukang:yukang-fix-116502, r=compiler-errors

Fix the dedup error because of spans from suggestion

Fixes #116502

I believe this kind of issue is supposed resolved by #118057, but the `==` in `span` respect syntax context, here we should only care that they point to the same bytes of source text, so should use `source_equal`.
This commit is contained in:
Matthias Krüger 2024-05-15 07:16:49 +02:00 committed by GitHub
commit 5f1a120ee5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 47 additions and 1 deletions

View File

@ -896,7 +896,7 @@ impl<'a, G: EmissionGuarantee> Diag<'a, G> {
style: SuggestionStyle,
) -> &mut Self {
suggestion.sort_unstable();
suggestion.dedup();
suggestion.dedup_by(|(s1, m1), (s2, m2)| s1.source_equal(*s2) && m1 == m2);
let parts = suggestion
.into_iter()

View File

@ -0,0 +1,16 @@
#![allow(dead_code)]
#![allow(unused_variables)]
fn bug() {
macro_rules! m {
() => {
_ //~ ERROR the placeholder `_` is not allowed within types on item signatures for structs
};
}
struct S<T = m!()>(m!(), T)
where
T: Trait<m!()>;
}
trait Trait<T> {}
fn main() {}

View File

@ -0,0 +1,30 @@
error[E0121]: the placeholder `_` is not allowed within types on item signatures for structs
--> $DIR/macro-span-issue-116502.rs:7:13
|
LL | _
| ^
| |
| not allowed in type signatures
| not allowed in type signatures
| not allowed in type signatures
...
LL | struct S<T = m!()>(m!(), T)
| ---- ---- in this macro invocation
| |
| in this macro invocation
LL | where
LL | T: Trait<m!()>;
| ---- in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
help: use type parameters instead
|
LL ~ U
LL | };
LL | }
LL ~ struct S<U>(m!(), T)
|
error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0121`.