From: Ariel Ben-Yehuda Date: Fri, 4 Mar 2016 13:34:28 +0000 (+0200) Subject: don't treat unit patterns as wildcard patterns X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=f40d12f1809f6fbc9bb53fa49f92665e652d314b;p=rust.git don't treat unit patterns as wildcard patterns Fixes #32004 --- diff --git a/src/librustc_typeck/check/_match.rs b/src/librustc_typeck/check/_match.rs index 8d0ae0f880d..93d983fae12 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 00000000000..0227a80fd75 --- /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 + } +}