Skip to content

Commit

Permalink
Rollup merge of #125135 - chenyukang:yukang-fix-116502, r=compiler-er…
Browse files Browse the repository at this point in the history
…rors

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`.
  • Loading branch information
matthiaskrgr authored May 15, 2024
2 parents f7c2934 + 75895f5 commit 5f1a120
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/rustc_errors/src/diagnostic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
16 changes: 16 additions & 0 deletions tests/ui/macros/macro-span-issue-116502.rs
Original file line number Diff line number Diff line change
@@ -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() {}
30 changes: 30 additions & 0 deletions tests/ui/macros/macro-span-issue-116502.stderr
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit 5f1a120

Please sign in to comment.