42 lines
1.3 KiB
Rust
42 lines
1.3 KiB
Rust
|
//@ 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 }
|