Permit deriving default on enums with #[default]

This commit is contained in:
Jacob Pratt
2021-06-29 20:22:52 -04:00
parent fd853c00e2
commit c70147fd66
13 changed files with 372 additions and 75 deletions

View File

@@ -5,9 +5,62 @@
#![feature(asm, llvm_asm)]
#![feature(trace_macros, concat_idents)]
#![feature(derive_default_enum)]
#[derive(Default)] //~ ERROR
enum OrDeriveThis {}
#[derive(Default)] //~ ERROR no default declared
enum NoDeclaredDefault {
Foo,
Bar,
}
#[derive(Default)] //~ ERROR multiple declared defaults
enum MultipleDefaults {
#[default]
Foo,
#[default]
Bar,
#[default]
Baz,
}
#[derive(Default)]
enum ExtraDeriveTokens {
#[default = 1] //~ ERROR `#[default]` attribute does not accept a value
Foo,
}
#[derive(Default)]
enum TwoDefaultAttrs {
#[default]
#[default]
Foo, //~ERROR multiple `#[default]` attributes
Bar,
}
#[derive(Default)]
enum ManyDefaultAttrs {
#[default]
#[default]
#[default]
#[default]
Foo, //~ERROR multiple `#[default]` attributes
Bar,
}
#[derive(Default)]
enum DefaultHasFields {
#[default]
Foo {}, //~ ERROR `#[default]` may only be used on unit variants
Bar,
}
#[derive(Default)]
enum NonExhaustiveDefault {
#[default]
#[non_exhaustive]
Foo, //~ ERROR default variant must be exhaustive
Bar,
}
fn main() {
asm!(invalid); //~ ERROR