diff options
| author | Jacob Pratt <jacob@jhpratt.dev> | 2021-06-29 20:22:52 -0400 |
|---|---|---|
| committer | Jacob Pratt <jacob@jhpratt.dev> | 2021-07-27 15:47:47 -0400 |
| commit | c70147fd66e08962ab06adf12eb6a41bc1ea7f08 (patch) | |
| tree | 3efabfe7f35fb460fdee7dbf4ec35c8d4b5305d3 /src/test | |
| parent | fd853c00e255559255885aadff9e93a1760c8728 (diff) | |
| download | rust-c70147fd66e08962ab06adf12eb6a41bc1ea7f08.tar.gz rust-c70147fd66e08962ab06adf12eb6a41bc1ea7f08.zip | |
Permit deriving default on enums with `#[default]`
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/deriving/deriving-default-enum.rs | 19 | ||||
| -rw-r--r-- | src/test/ui/deriving/deriving-with-helper.rs | 5 | ||||
| -rw-r--r-- | src/test/ui/error-codes/E0665.rs | 8 | ||||
| -rw-r--r-- | src/test/ui/error-codes/E0665.stderr | 11 | ||||
| -rw-r--r-- | src/test/ui/feature-gates/feature-gate-derive_default_enum.rs | 7 | ||||
| -rw-r--r-- | src/test/ui/feature-gates/feature-gate-derive_default_enum.stderr | 13 | ||||
| -rw-r--r-- | src/test/ui/macros/macros-nonfatal-errors.rs | 57 | ||||
| -rw-r--r-- | src/test/ui/macros/macros-nonfatal-errors.stderr | 119 | ||||
| -rw-r--r-- | src/test/ui/resolve/issue-2356.rs | 2 |
9 files changed, 199 insertions, 42 deletions
diff --git a/src/test/ui/deriving/deriving-default-enum.rs b/src/test/ui/deriving/deriving-default-enum.rs new file mode 100644 index 00000000000..931ff1a5847 --- /dev/null +++ b/src/test/ui/deriving/deriving-default-enum.rs @@ -0,0 +1,19 @@ +// run-pass + +#![feature(derive_default_enum)] + +// nb: does not impl Default +#[derive(Debug, PartialEq)] +struct NotDefault; + +#[derive(Debug, Default, PartialEq)] +enum Foo { + #[default] + Alpha, + #[allow(dead_code)] + Beta(NotDefault), +} + +fn main() { + assert_eq!(Foo::default(), Foo::Alpha); +} diff --git a/src/test/ui/deriving/deriving-with-helper.rs b/src/test/ui/deriving/deriving-with-helper.rs index ea74a15624c..d8f0b27a2e5 100644 --- a/src/test/ui/deriving/deriving-with-helper.rs +++ b/src/test/ui/deriving/deriving-with-helper.rs @@ -5,6 +5,7 @@ #![feature(lang_items)] #![feature(no_core)] #![feature(rustc_attrs)] +#![feature(derive_default_enum)] #![no_core] @@ -30,7 +31,7 @@ mod default { trait Sized {} #[derive(Default)] -struct S { +enum S { #[default] // OK - field: u8, + Foo, } diff --git a/src/test/ui/error-codes/E0665.rs b/src/test/ui/error-codes/E0665.rs deleted file mode 100644 index cfd42bd9aac..00000000000 --- a/src/test/ui/error-codes/E0665.rs +++ /dev/null @@ -1,8 +0,0 @@ -#[derive(Default)] //~ ERROR E0665 -enum Food { - Sweet, - Salty, -} - -fn main() { -} diff --git a/src/test/ui/error-codes/E0665.stderr b/src/test/ui/error-codes/E0665.stderr deleted file mode 100644 index bb8b3906ca6..00000000000 --- a/src/test/ui/error-codes/E0665.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error[E0665]: `Default` cannot be derived for enums, only structs - --> $DIR/E0665.rs:1:10 - | -LL | #[derive(Default)] - | ^^^^^^^ - | - = note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info) - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0665`. diff --git a/src/test/ui/feature-gates/feature-gate-derive_default_enum.rs b/src/test/ui/feature-gates/feature-gate-derive_default_enum.rs new file mode 100644 index 00000000000..05a5d4e1422 --- /dev/null +++ b/src/test/ui/feature-gates/feature-gate-derive_default_enum.rs @@ -0,0 +1,7 @@ +#[derive(Default)] //~ ERROR deriving `Default` on enums is experimental +enum Foo { + #[default] + Alpha, +} + +fn main() {} diff --git a/src/test/ui/feature-gates/feature-gate-derive_default_enum.stderr b/src/test/ui/feature-gates/feature-gate-derive_default_enum.stderr new file mode 100644 index 00000000000..58dd4d508a7 --- /dev/null +++ b/src/test/ui/feature-gates/feature-gate-derive_default_enum.stderr @@ -0,0 +1,13 @@ +error[E0658]: deriving `Default` on enums is experimental + --> $DIR/feature-gate-derive_default_enum.rs:1:10 + | +LL | #[derive(Default)] + | ^^^^^^^ + | + = note: see issue #86985 <https://github.com/rust-lang/rust/issues/86985> for more information + = help: add `#![feature(derive_default_enum)]` to the crate attributes to enable + = note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info) + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/macros/macros-nonfatal-errors.rs b/src/test/ui/macros/macros-nonfatal-errors.rs index 0a496c9dc3d..bb5f4d089bc 100644 --- a/src/test/ui/macros/macros-nonfatal-errors.rs +++ b/src/test/ui/macros/macros-nonfatal-errors.rs @@ -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 diff --git a/src/test/ui/macros/macros-nonfatal-errors.stderr b/src/test/ui/macros/macros-nonfatal-errors.stderr index 14058f86639..4bb5e9b8169 100644 --- a/src/test/ui/macros/macros-nonfatal-errors.stderr +++ b/src/test/ui/macros/macros-nonfatal-errors.stderr @@ -1,49 +1,133 @@ -error[E0665]: `Default` cannot be derived for enums, only structs - --> $DIR/macros-nonfatal-errors.rs:9:10 +error: no default declared + --> $DIR/macros-nonfatal-errors.rs:10:10 | LL | #[derive(Default)] | ^^^^^^^ | + = help: make a unit variant default by placing `#[default]` above it = note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info) +error: multiple declared defaults + --> $DIR/macros-nonfatal-errors.rs:16:10 + | +LL | #[derive(Default)] + | ^^^^^^^ +... +LL | Foo, + | --- first default +LL | #[default] +LL | Bar, + | --- additional default +LL | #[default] +LL | Baz, + | --- 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: `#[default]` attribute does not accept a value + --> $DIR/macros-nonfatal-errors.rs:28:5 + | +LL | #[default = 1] + | ^^^^^^^^^^^^^^ + | + = help: try using `#[default]` + +error: multiple `#[default]` attributes + --> $DIR/macros-nonfatal-errors.rs:36:5 + | +LL | #[default] + | ---------- `#[default]` used here +LL | #[default] + | ---------- `#[default]` used again here +LL | Foo, + | ^^^ + | + = note: only one `#[default]` attribute is needed +help: try removing this + --> $DIR/macros-nonfatal-errors.rs:35:5 + | +LL | #[default] + | ^^^^^^^^^^ + +error: multiple `#[default]` attributes + --> $DIR/macros-nonfatal-errors.rs:46:5 + | +LL | #[default] + | ---------- `#[default]` used here +LL | #[default] + | ---------- `#[default]` used again here +... +LL | Foo, + | ^^^ + | + = note: only one `#[default]` attribute is needed +help: try removing these + --> $DIR/macros-nonfatal-errors.rs:43:5 + | +LL | #[default] + | ^^^^^^^^^^ +LL | #[default] + | ^^^^^^^^^^ +LL | #[default] + | ^^^^^^^^^^ + +error: `#[default]` may only be used on unit variants + --> $DIR/macros-nonfatal-errors.rs:53:5 + | +LL | Foo {}, + | ^^^ + | + = help: consider a manual implementation of `Default` + +error: default variant must be exhaustive + --> $DIR/macros-nonfatal-errors.rs:61:5 + | +LL | #[non_exhaustive] + | ----------------- declared `#[non_exhaustive]` here +LL | Foo, + | ^^^ + | + = help: consider a manual implementation of `Default` + error: asm template must be a string literal - --> $DIR/macros-nonfatal-errors.rs:13:10 + --> $DIR/macros-nonfatal-errors.rs:66:10 | LL | asm!(invalid); | ^^^^^^^ error: inline assembly must be a string literal - --> $DIR/macros-nonfatal-errors.rs:14:15 + --> $DIR/macros-nonfatal-errors.rs:67:15 | LL | llvm_asm!(invalid); | ^^^^^^^ error: concat_idents! requires ident args. - --> $DIR/macros-nonfatal-errors.rs:16:5 + --> $DIR/macros-nonfatal-errors.rs:69:5 | LL | concat_idents!("not", "idents"); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: argument must be a string literal - --> $DIR/macros-nonfatal-errors.rs:18:17 + --> $DIR/macros-nonfatal-errors.rs:71:17 | LL | option_env!(invalid); | ^^^^^^^ error: expected string literal - --> $DIR/macros-nonfatal-errors.rs:19:10 + --> $DIR/macros-nonfatal-errors.rs:72:10 | LL | env!(invalid); | ^^^^^^^ error: expected string literal - --> $DIR/macros-nonfatal-errors.rs:20:10 + --> $DIR/macros-nonfatal-errors.rs:73:10 | LL | env!(foo, abr, baz); | ^^^ error: environment variable `RUST_HOPEFULLY_THIS_DOESNT_EXIST` not defined - --> $DIR/macros-nonfatal-errors.rs:21:5 + --> $DIR/macros-nonfatal-errors.rs:74:5 | LL | env!("RUST_HOPEFULLY_THIS_DOESNT_EXIST"); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -51,7 +135,7 @@ LL | env!("RUST_HOPEFULLY_THIS_DOESNT_EXIST"); = note: this error originates in the macro `env` (in Nightly builds, run with -Z macro-backtrace for more info) error: format argument must be a string literal - --> $DIR/macros-nonfatal-errors.rs:23:13 + --> $DIR/macros-nonfatal-errors.rs:76:13 | LL | format!(invalid); | ^^^^^^^ @@ -62,19 +146,19 @@ LL | format!("{}", invalid); | ^^^^^ error: argument must be a string literal - --> $DIR/macros-nonfatal-errors.rs:25:14 + --> $DIR/macros-nonfatal-errors.rs:78:14 | LL | include!(invalid); | ^^^^^^^ error: argument must be a string literal - --> $DIR/macros-nonfatal-errors.rs:27:18 + --> $DIR/macros-nonfatal-errors.rs:80:18 | LL | include_str!(invalid); | ^^^^^^^ error: couldn't read $DIR/i'd be quite surprised if a file with this name existed: $FILE_NOT_FOUND_MSG (os error 2) - --> $DIR/macros-nonfatal-errors.rs:28:5 + --> $DIR/macros-nonfatal-errors.rs:81:5 | LL | include_str!("i'd be quite surprised if a file with this name existed"); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -82,13 +166,13 @@ LL | include_str!("i'd be quite surprised if a file with this name existed") = note: this error originates in the macro `include_str` (in Nightly builds, run with -Z macro-backtrace for more info) error: argument must be a string literal - --> $DIR/macros-nonfatal-errors.rs:29:20 + --> $DIR/macros-nonfatal-errors.rs:82:20 | LL | include_bytes!(invalid); | ^^^^^^^ error: couldn't read $DIR/i'd be quite surprised if a file with this name existed: $FILE_NOT_FOUND_MSG (os error 2) - --> $DIR/macros-nonfatal-errors.rs:30:5 + --> $DIR/macros-nonfatal-errors.rs:83:5 | LL | include_bytes!("i'd be quite surprised if a file with this name existed"); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -96,11 +180,10 @@ LL | include_bytes!("i'd be quite surprised if a file with this name existed = note: this error originates in the macro `include_bytes` (in Nightly builds, run with -Z macro-backtrace for more info) error: trace_macros! accepts only `true` or `false` - --> $DIR/macros-nonfatal-errors.rs:32:5 + --> $DIR/macros-nonfatal-errors.rs:85:5 | LL | trace_macros!(invalid); | ^^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to 15 previous errors +error: aborting due to 21 previous errors -For more information about this error, try `rustc --explain E0665`. diff --git a/src/test/ui/resolve/issue-2356.rs b/src/test/ui/resolve/issue-2356.rs index f7b2dd13dcb..fe9bf4d443e 100644 --- a/src/test/ui/resolve/issue-2356.rs +++ b/src/test/ui/resolve/issue-2356.rs @@ -29,7 +29,7 @@ impl Clone for Cat { impl Default for Cat { fn default() -> Self { default(); - //~^ ERROR cannot find function `default` + //~^ ERROR cannot find function `default` in this scope [E0425] loop {} } } |
