From f40d12f1809f6fbc9bb53fa49f92665e652d314b Mon Sep 17 00:00:00 2001 From: Ariel Ben-Yehuda Date: Fri, 4 Mar 2016 15:34:28 +0200 Subject: [PATCH] don't treat unit patterns as wildcard patterns Fixes #32004 --- src/librustc_typeck/check/_match.rs | 2 +- src/test/compile-fail/issue-32004.rs | 29 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/test/compile-fail/issue-32004.rs diff --git a/src/librustc_typeck/check/_match.rs b/src/librustc_typeck/check/_match.rs index 8d0ae0f880d09..93d983fae12e7 100644 --- a/src/librustc_typeck/check/_match.rs +++ b/src/librustc_typeck/check/_match.rs @@ -204,7 +204,7 @@ pub fn check_pat<'a, 'tcx>(pcx: &pat_ctxt<'a, 'tcx>, check_pat_enum(pcx, pat, path, subpats.as_ref().map(|v| &v[..]), expected, true); } PatKind::Path(ref path) => { - check_pat_enum(pcx, pat, path, None, expected, false); + check_pat_enum(pcx, pat, path, Some(&[]), expected, false); } PatKind::QPath(ref qself, ref path) => { let self_ty = fcx.to_ty(&qself.ty); diff --git a/src/test/compile-fail/issue-32004.rs b/src/test/compile-fail/issue-32004.rs new file mode 100644 index 0000000000000..0227a80fd75d3 --- /dev/null +++ b/src/test/compile-fail/issue-32004.rs @@ -0,0 +1,29 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +enum Foo { + Bar(i32), + Baz +} + +struct S; + +fn main() { + match Foo::Baz { + Foo::Bar => {} + //~^ ERROR this pattern has 0 fields, but the corresponding variant + _ => {} + } + + match S { + S(()) => {} + //~^ ERROR this pattern has 1 field, but the corresponding struct + } +}