diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-12-01 11:59:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-01 11:59:01 +0100 |
| commit | ee9eaa695c22de6ffa1edadc4b98b0c0e2e258f8 (patch) | |
| tree | 64338d7d9ed76a046fbf36588f847754cede5415 | |
| parent | 3ec9a6dd74ed96fccc40b30dac7f0946c8bfd777 (diff) | |
| parent | ab264ae61217df6a2b66c8f2bbff294b793a1f94 (diff) | |
| download | rust-ee9eaa695c22de6ffa1edadc4b98b0c0e2e258f8.tar.gz rust-ee9eaa695c22de6ffa1edadc4b98b0c0e2e258f8.zip | |
Rollup merge of #105106 - jhpratt:issue-105101, r=TaKO8Ki
Fix ICE from #105101 Fixes #105101 Rather than comparing idents, compare spans, which should be unique to each variant.
| -rw-r--r-- | compiler/rustc_builtin_macros/src/deriving/default.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/deriving/issue-105101.rs | 9 | ||||
| -rw-r--r-- | src/test/ui/deriving/issue-105101.stderr | 29 |
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 e4e2435848d..e88d2e409c6 100644 --- a/compiler/rustc_builtin_macros/src/deriving/default.rs +++ b/compiler/rustc_builtin_macros/src/deriving/default.rs @@ -145,7 +145,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`. |
