Skip to content

Commit

Permalink
Rollup merge of #105106 - jhpratt:issue-105101, r=TaKO8Ki
Browse files Browse the repository at this point in the history
Fix ICE from #105101

Fixes #105101

Rather than comparing idents, compare spans, which should be unique to each variant.
  • Loading branch information
Dylan-DPC committed Dec 1, 2022
2 parents de9f772 + ab264ae commit e318732
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/rustc_builtin_macros/src/deriving/default.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ fn extract_default_variant<'a>(
let suggestion = default_variants
.iter()
.filter_map(|v| {
if v.ident == variant.ident {
if v.span == variant.span {
None
} else {
Some((cx.sess.find_by_name(&v.attrs, kw::Default)?.span, String::new()))
Expand Down
9 changes: 9 additions & 0 deletions src/test/ui/deriving/issue-105101.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// compile-flags: --crate-type=lib

#[derive(Default)] //~ ERROR multiple declared defaults
enum E {
#[default]
A,
#[default]
A, //~ ERROR defined multiple times
}
29 changes: 29 additions & 0 deletions src/test/ui/deriving/issue-105101.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
error: multiple declared defaults
--> $DIR/issue-105101.rs:3:10
|
LL | #[derive(Default)]
| ^^^^^^^
...
LL | A,
| - first default
LL | #[default]
LL | A,
| - additional default
|
= note: only one variant can be default
= note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0428]: the name `A` is defined multiple times
--> $DIR/issue-105101.rs:8:5
|
LL | A,
| - previous definition of the type `A` here
LL | #[default]
LL | A,
| ^ `A` redefined here
|
= note: `A` must be defined only once in the type namespace of this enum

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0428`.

0 comments on commit e318732

Please sign in to comment.