| //@ compile-flags: --crate-type=lib | |
| // When we get multiple `#[default]` variants, we emit several tool-only suggestions | |
| // to remove all except one of the `#[default]`s. | |
| #[derive(Default)] //~ ERROR multiple declared defaults | |
| enum A { | |
| #[default] //~ HELP make `B` default | |
| #[default] //~ HELP make `A` default | |
| A, | |
| #[default] // also "HELP make `A` default", but compiletest can't handle multispans | |
| B, | |
| } | |
| // Originally, we took each defaulted variant and emitted the suggestion for every variant | |
| // with a different identifier, causing an ICE when multiple variants have the same identifier: | |
| // https://github.com/rust-lang/rust/pull/105106 | |
| #[derive(Default)] //~ ERROR multiple declared defaults | |
| enum E { | |
| #[default] //~ HELP make `A` default | |
| A, | |
| #[default] //~ HELP make `A` default | |
| A, //~ ERROR defined multiple times | |
| } | |
| // Then, we took each defaulted variant and emitted the suggestion for every variant | |
| // with a different span, causing an ICE when multiple variants have the same span: | |
| // https://github.com/rust-lang/rust/issues/118119 | |
| macro_rules! m { | |
| { $($id:ident)* } => { | |
| #[derive(Default)] //~ ERROR multiple declared defaults | |
| enum F { | |
| $( | |
| #[default] | |
| $id, | |
| )* | |
| } | |
| } | |
| } | |
| m! { A B } |