summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-01-31 02:10:52 +0100
committerGitHub <noreply@github.com>2019-01-31 02:10:52 +0100
commitbc7be96cb9137abfc1c8f7afbc88ad6508e0f20c (patch)
tree2923a8fc0f8a00f4dba1fb208f5e49804140da47
parentc76456c25352228b4510aa0fe9d4c841b1383bde (diff)
parent74675fed682d02282419e840b88a501bc0b909e2 (diff)
downloadrust-bc7be96cb9137abfc1c8f7afbc88ad6508e0f20c.tar.gz
Rollup merge of #58007 - estebank:issue-58006, r=petrochenkov
Don't panic when accessing enum variant ctor using `Self` in match Fix #58006. r? @petrochenkov
-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`.