about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-12-01 05:55:04 +0000
committerbors <bors@rust-lang.org>2015-12-01 05:55:04 +0000
commitc212c0e1d1ff9f061c8149b4831e5fa1cb7e5b83 (patch)
tree75027f4679adea3c100290d3182edb2230f36c52
parentbaf020802fcc8fd4f8b1890932dde3d2a5a37596 (diff)
parent23c7e6658918a810afd3854d7f25949a9f68a0f2 (diff)
downloadrust-c212c0e1d1ff9f061c8149b4831e5fa1cb7e5b83.tar.gz
rust-c212c0e1d1ff9f061c8149b4831e5fa1cb7e5b83.zip
Auto merge of #30116 - petrochenkov:exhaust, r=alexcrichton
Fixes https://github.com/rust-lang/rust/pull/29383#issuecomment-160652130

r? @bluss
-rw-r--r--src/librustc_typeck/check/_match.rs5
-rw-r--r--src/test/run-pass/issue-pr29383.rs22
2 files changed, 26 insertions, 1 deletions
diff --git a/src/librustc_typeck/check/_match.rs b/src/librustc_typeck/check/_match.rs
index 1053919be53..1a3812147d8 100644
--- a/src/librustc_typeck/check/_match.rs
+++ b/src/librustc_typeck/check/_match.rs
@@ -636,8 +636,11 @@ pub fn check_pat_enum<'a, 'tcx>(pcx: &pat_ctxt<'a, 'tcx>,
 
     let report_bad_struct_kind = |is_warning| {
         bad_struct_kind_err(tcx.sess, pat.span, path, is_warning);
-        fcx.write_error(pat.id);
+        if is_warning {
+            return
+        }
 
+        fcx.write_error(pat.id);
         if let Some(subpats) = subpats {
             for pat in subpats {
                 check_pat(pcx, &**pat, tcx.types.err);
diff --git a/src/test/run-pass/issue-pr29383.rs b/src/test/run-pass/issue-pr29383.rs
new file mode 100644
index 00000000000..487dbdd33c9
--- /dev/null
+++ b/src/test/run-pass/issue-pr29383.rs
@@ -0,0 +1,22 @@
+// Copyright 2015 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+enum E {
+    A,
+    B,
+}
+
+fn main() {
+    match None {
+        None => {}
+        Some(E::A(..)) => {}
+        Some(E::B(..)) => {}
+    }
+}