From f481dba3d4745b87b4d19f14b7592687d9afb90e Mon Sep 17 00:00:00 2001 From: Devin Ragotzy Date: Wed, 27 Oct 2021 20:55:44 -0400 Subject: [PATCH] Add struct to stability ui tests in usefulness --- .../pattern/usefulness/auxiliary/unstable.rs | 13 ++++++++++++- .../pattern/usefulness/stable-gated-fields.rs | 16 ++++++++++++++++ .../usefulness/stable-gated-patterns.rs | 12 ++++++------ .../usefulness/unstable-gated-fields.rs | 18 ++++++++++++++++++ .../usefulness/unstable-gated-patterns.rs | 16 ++++++++-------- 5 files changed, 60 insertions(+), 15 deletions(-) create mode 100644 src/test/ui/pattern/usefulness/stable-gated-fields.rs create mode 100644 src/test/ui/pattern/usefulness/unstable-gated-fields.rs diff --git a/src/test/ui/pattern/usefulness/auxiliary/unstable.rs b/src/test/ui/pattern/usefulness/auxiliary/unstable.rs index 3142489c861..a06b3a6e4e5 100644 --- a/src/test/ui/pattern/usefulness/auxiliary/unstable.rs +++ b/src/test/ui/pattern/usefulness/auxiliary/unstable.rs @@ -2,7 +2,7 @@ #![stable(feature = "stable_test_feature", since = "1.0.0")] #[stable(feature = "stable_test_feature", since = "1.0.0")] -pub enum Foo { +pub enum UnstableEnum { #[stable(feature = "stable_test_feature", since = "1.0.0")] Stable, #[stable(feature = "stable_test_feature", since = "1.0.0")] @@ -10,3 +10,14 @@ pub enum Foo { #[unstable(feature = "unstable_test_feature", issue = "none")] Unstable, } + +#[derive(Default)] +#[stable(feature = "stable_test_feature", since = "1.0.0")] +pub struct UnstableStruct { + #[stable(feature = "stable_test_feature", since = "1.0.0")] + pub stable: bool, + #[stable(feature = "stable_test_feature", since = "1.0.0")] + pub stable2: usize, + #[unstable(feature = "unstable_test_feature", issue = "none")] + pub unstable: u8, +} diff --git a/src/test/ui/pattern/usefulness/stable-gated-fields.rs b/src/test/ui/pattern/usefulness/stable-gated-fields.rs new file mode 100644 index 00000000000..90f40a8d629 --- /dev/null +++ b/src/test/ui/pattern/usefulness/stable-gated-fields.rs @@ -0,0 +1,16 @@ +// aux-build:unstable.rs + +extern crate unstable; + +use unstable::UnstableStruct; + +fn main() { + let UnstableStruct { stable } = UnstableStruct::default(); + //~^ pattern does not mention field `stable2` and inaccessible fields + + let UnstableStruct { stable, stable2 } = UnstableStruct::default(); + //~^ pattern requires `..` due to inaccessible fields + + // OK: stable field is matched + let UnstableStruct { stable, stable2, .. } = UnstableStruct::default(); +} diff --git a/src/test/ui/pattern/usefulness/stable-gated-patterns.rs b/src/test/ui/pattern/usefulness/stable-gated-patterns.rs index 2e023a3be4a..ff1c472e24f 100644 --- a/src/test/ui/pattern/usefulness/stable-gated-patterns.rs +++ b/src/test/ui/pattern/usefulness/stable-gated-patterns.rs @@ -2,17 +2,17 @@ extern crate unstable; -use unstable::Foo; +use unstable::UnstableEnum; fn main() { - match Foo::Stable { - Foo::Stable => {} + match UnstableEnum::Stable { + UnstableEnum::Stable => {} } //~^^^ non-exhaustive patterns: `Stable2` and `_` not covered - match Foo::Stable { - Foo::Stable => {} - Foo::Stable2 => {} + match UnstableEnum::Stable { + UnstableEnum::Stable => {} + UnstableEnum::Stable2 => {} } //~^^^^ non-exhaustive patterns: `_` not covered } diff --git a/src/test/ui/pattern/usefulness/unstable-gated-fields.rs b/src/test/ui/pattern/usefulness/unstable-gated-fields.rs new file mode 100644 index 00000000000..2b473ae989b --- /dev/null +++ b/src/test/ui/pattern/usefulness/unstable-gated-fields.rs @@ -0,0 +1,18 @@ +#![feature(unstable_test_feature)] + +// aux-build:unstable.rs + +extern crate unstable; + +use unstable::UnstableStruct; + +fn main() { + let UnstableStruct { stable, stable2, } = UnstableStruct::default(); + //~^ pattern does not mention field `unstable` + + let UnstableStruct { stable, unstable, } = UnstableStruct::default(); + //~^ pattern does not mention field `stable2` + + // OK: stable field is matched + let UnstableStruct { stable, stable2, unstable } = UnstableStruct::default(); +} diff --git a/src/test/ui/pattern/usefulness/unstable-gated-patterns.rs b/src/test/ui/pattern/usefulness/unstable-gated-patterns.rs index b9804b0ffe7..bdab327fd57 100644 --- a/src/test/ui/pattern/usefulness/unstable-gated-patterns.rs +++ b/src/test/ui/pattern/usefulness/unstable-gated-patterns.rs @@ -4,19 +4,19 @@ extern crate unstable; -use unstable::Foo; +use unstable::UnstableEnum; fn main() { - match Foo::Stable { - Foo::Stable => {} - Foo::Stable2 => {} + match UnstableEnum::Stable { + UnstableEnum::Stable => {} + UnstableEnum::Stable2 => {} } //~^^^^ non-exhaustive patterns: `Unstable` not covered // Ok: all variants are explicitly matched - match Foo::Stable { - Foo::Stable => {} - Foo::Stable2 => {} - Foo::Unstable => {} + match UnstableEnum::Stable { + UnstableEnum::Stable => {} + UnstableEnum::Stable2 => {} + UnstableEnum::Unstable => {} } } -- 2.44.0