diff options
author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-01-31 02:10:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-31 02:10:52 +0100 |
commit | bc7be96cb9137abfc1c8f7afbc88ad6508e0f20c (patch) | |
tree | 2923a8fc0f8a00f4dba1fb208f5e49804140da47 | |
parent | c76456c25352228b4510aa0fe9d4c841b1383bde (diff) | |
parent | 74675fed682d02282419e840b88a501bc0b909e2 (diff) | |
download | rust-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.rs | 3 | ||||
-rw-r--r-- | src/test/ui/issues/issue-58006.rs | 15 | ||||
-rw-r--r-- | src/test/ui/issues/issue-58006.stderr | 9 |
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`. |