| //@ 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 } |