diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2021-11-29 10:41:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-29 10:41:34 +0100 |
| commit | a2f924a255f472953389e9009321f2e3805afe2c (patch) | |
| tree | 1210c94d594c35a6c67500b3b925bf901d01f8f7 | |
| parent | 80277dcc4f39c7142c7217543b083ed6fd9919e8 (diff) | |
| parent | 50619f568a250750fcb6bea271ccfd8fdc0926bf (diff) | |
| download | rust-a2f924a255f472953389e9009321f2e3805afe2c.tar.gz rust-a2f924a255f472953389e9009321f2e3805afe2c.zip | |
Rollup merge of #91281 - scottmcm:non-exhaustive-as-test, r=Mark-Simulacrum
Add demonstration test for #91161 Since cross-crate things are hard to demonstrate in playground, here's a test showing that something currently works that shouldn't. cc https://github.com/rust-lang/rust/issues/91161 that tracks fixing the problem (and updating this test)
| -rw-r--r-- | src/test/ui/rfc-2008-non-exhaustive/auxiliary/enums.rs | 12 | ||||
| -rw-r--r-- | src/test/ui/rfc-2008-non-exhaustive/enum-as-cast.rs | 17 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/test/ui/rfc-2008-non-exhaustive/auxiliary/enums.rs b/src/test/ui/rfc-2008-non-exhaustive/auxiliary/enums.rs index 0098f087d10..cb2b585ab96 100644 --- a/src/test/ui/rfc-2008-non-exhaustive/auxiliary/enums.rs +++ b/src/test/ui/rfc-2008-non-exhaustive/auxiliary/enums.rs @@ -30,3 +30,15 @@ pub enum VariantNonExhaustive { pub enum NonExhaustiveSingleVariant { A(bool), } + +#[repr(u8)] +pub enum FieldLessWithNonExhaustiveVariant { + A, + B, + #[non_exhaustive] + C, +} + +impl Default for FieldLessWithNonExhaustiveVariant { + fn default() -> Self { Self::A } +} diff --git a/src/test/ui/rfc-2008-non-exhaustive/enum-as-cast.rs b/src/test/ui/rfc-2008-non-exhaustive/enum-as-cast.rs new file mode 100644 index 00000000000..d9657bac776 --- /dev/null +++ b/src/test/ui/rfc-2008-non-exhaustive/enum-as-cast.rs @@ -0,0 +1,17 @@ +// aux-build:enums.rs +// run-pass + +extern crate enums; + +use enums::FieldLessWithNonExhaustiveVariant; + +fn main() { + let e = FieldLessWithNonExhaustiveVariant::default(); + // FIXME: https://github.com/rust-lang/rust/issues/91161 + // This `as` cast *should* be an error, since it would fail + // if the non-exhaustive variant got fields. But today it + // doesn't. The fix for that will update this test to + // show an error (and not be run-pass any more). + let d = e as u8; + assert_eq!(d, 0); +} |
