about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2021-11-29 10:41:34 +0100
committerGitHub <noreply@github.com>2021-11-29 10:41:34 +0100
commita2f924a255f472953389e9009321f2e3805afe2c (patch)
tree1210c94d594c35a6c67500b3b925bf901d01f8f7
parent80277dcc4f39c7142c7217543b083ed6fd9919e8 (diff)
parent50619f568a250750fcb6bea271ccfd8fdc0926bf (diff)
downloadrust-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.rs12
-rw-r--r--src/test/ui/rfc-2008-non-exhaustive/enum-as-cast.rs17
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);
+}