about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJacob Pratt <jacob@jhpratt.dev>2022-11-30 21:17:00 +0000
committerJacob Pratt <jacob@jhpratt.dev>2022-11-30 21:18:31 +0000
commitab264ae61217df6a2b66c8f2bbff294b793a1f94 (patch)
tree95941e2828b7d94394f3aa3cf9107532d787e8d7
parentc97b539e408ea353f4fde2f9251d598291fec421 (diff)
downloadrust-ab264ae61217df6a2b66c8f2bbff294b793a1f94.tar.gz
rust-ab264ae61217df6a2b66c8f2bbff294b793a1f94.zip
Fix ICE from #105101
-rw-r--r--compiler/rustc_builtin_macros/src/deriving/default.rs2
-rw-r--r--src/test/ui/deriving/issue-105101.rs9
-rw-r--r--src/test/ui/deriving/issue-105101.stderr29
3 files changed, 39 insertions, 1 deletions
diff --git a/compiler/rustc_builtin_macros/src/deriving/default.rs b/compiler/rustc_builtin_macros/src/deriving/default.rs
index 93f297ad88b..bd5c6e42a19 100644
--- a/compiler/rustc_builtin_macros/src/deriving/default.rs
+++ b/compiler/rustc_builtin_macros/src/deriving/default.rs
@@ -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()))
diff --git a/src/test/ui/deriving/issue-105101.rs b/src/test/ui/deriving/issue-105101.rs
new file mode 100644
index 00000000000..1a377feb919
--- /dev/null
+++ b/src/test/ui/deriving/issue-105101.rs
@@ -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
+}
diff --git a/src/test/ui/deriving/issue-105101.stderr b/src/test/ui/deriving/issue-105101.stderr
new file mode 100644
index 00000000000..0f6f67043f3
--- /dev/null
+++ b/src/test/ui/deriving/issue-105101.stderr
@@ -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`.