about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-01-30 11:39:56 -0800
committerEsteban Küber <esteban@kuber.com.ar>2019-01-30 11:39:56 -0800
commit74675fed682d02282419e840b88a501bc0b909e2 (patch)
treeb4fabd5178e64dfd62267633a3930969c0f490fc
parentd9a2e3b1ccf16c6d43f56f503bd80c1ad137d523 (diff)
downloadrust-74675fed682d02282419e840b88a501bc0b909e2.tar.gz
rust-74675fed682d02282419e840b88a501bc0b909e2.zip
Don't panic when accessing enum variant ctor using `Self` in match
-rw-r--r--src/librustc_typeck/check/_match.rs3
-rw-r--r--src/test/ui/issues/issue-58006.rs15
-rw-r--r--src/test/ui/issues/issue-58006.stderr9
3 files changed, 26 insertions, 1 deletions
diff --git a/src/librustc_typeck/check/_match.rs b/src/librustc_typeck/check/_match.rs
index 141b8222b1f..4203c71a00a 100644
--- a/src/librustc_typeck/check/_match.rs
+++ b/src/librustc_typeck/check/_match.rs
@@ -784,7 +784,8 @@ https://doc.rust-lang.org/reference/types.html#trait-objects");
                 report_unexpected_variant_def(tcx, &def, pat.span, qpath);
                 return tcx.types.err;
             }
-            Def::VariantCtor(_, CtorKind::Fictive) => {
+            Def::VariantCtor(_, CtorKind::Fictive) |
+            Def::VariantCtor(_, CtorKind::Fn) => {
                 report_unexpected_variant_def(tcx, &def, pat.span, qpath);
                 return tcx.types.err;
             }
diff --git a/src/test/ui/issues/issue-58006.rs b/src/test/ui/issues/issue-58006.rs
new file mode 100644
index 00000000000..1fb5fefa759
--- /dev/null
+++ b/src/test/ui/issues/issue-58006.rs
@@ -0,0 +1,15 @@
+#![feature(type_alias_enum_variants)]
+pub enum Enum {
+    A(usize),
+}
+
+impl Enum {
+    fn foo(&self) -> () {
+        match self {
+            Self::A => (),
+            //~^ ERROR expected unit struct/variant or constant, found tuple variant
+        }
+    }
+}
+
+fn main() {}
diff --git a/src/test/ui/issues/issue-58006.stderr b/src/test/ui/issues/issue-58006.stderr
new file mode 100644
index 00000000000..c65e3e2777f
--- /dev/null
+++ b/src/test/ui/issues/issue-58006.stderr
@@ -0,0 +1,9 @@
+error[E0533]: expected unit struct/variant or constant, found tuple variant `<Self>::A`
+  --> $DIR/issue-58006.rs:9:13
+   |
+LL |             Self::A => (),
+   |             ^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0533`.