about summary refs log tree commit diff
diff options
context:
space:
mode:
authorThomas Karpiniec <tk@1.21jiggawatts.net>2017-09-23 16:04:03 +1000
committerThomas Karpiniec <tk@1.21jiggawatts.net>2017-09-23 16:04:03 +1000
commit8a6636243091e6c490c8b010a6db21fd63bc6a20 (patch)
treee407c5778482b6fa5d18137f3ef43f2b1dbe1939
parent14039a42ac6365afc842214989613f9a688c9a66 (diff)
downloadrust-8a6636243091e6c490c8b010a6db21fd63bc6a20.tar.gz
rust-8a6636243091e6c490c8b010a6db21fd63bc6a20.zip
Diagnostic note when matching tuple enum with struct pattern
-rw-r--r--src/librustc_typeck/check/_match.rs13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/librustc_typeck/check/_match.rs b/src/librustc_typeck/check/_match.rs
index cbf58209d05..d942b2d1230 100644
--- a/src/librustc_typeck/check/_match.rs
+++ b/src/librustc_typeck/check/_match.rs
@@ -787,11 +787,14 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
             for field in variant.fields
                 .iter()
                 .filter(|field| !used_fields.contains_key(&field.name)) {
-                struct_span_err!(tcx.sess, span, E0027,
-                                "pattern does not mention field `{}`",
-                                field.name)
-                                .span_label(span, format!("missing field `{}`", field.name))
-                                .emit();
+                let mut diag = struct_span_err!(tcx.sess, span, E0027,
+                                                "pattern does not mention field `{}`",
+                                                field.name);
+                diag.span_label(span, format!("missing field `{}`", field.name));
+                if variant.ctor_kind == CtorKind::Fn {
+                    diag.note("trying to match a tuple variant with a struct variant pattern");
+                }
+                diag.emit();
             }
         }
     }