about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNadrieril <nadrieril+git@gmail.com>2019-11-30 16:27:58 +0000
committerNadrieril <nadrieril+git@gmail.com>2019-12-04 16:43:21 +0000
commit1bd97ae8a19d4dc811c826bb1b66ab5ab94a8160 (patch)
tree81cfc90fcf556cd6a93eb49dcfdd704341410fcc
parentb26aa0b52958e23a70b1a5f2a8b55ad49fbbd337 (diff)
downloadrust-1bd97ae8a19d4dc811c826bb1b66ab5ab94a8160.tar.gz
rust-1bd97ae8a19d4dc811c826bb1b66ab5ab94a8160.zip
Tweak error on empty match
-rw-r--r--src/librustc_mir/hair/pattern/check_match.rs13
-rw-r--r--src/test/ui/pattern/usefulness/match-empty.rs2
-rw-r--r--src/test/ui/pattern/usefulness/match-empty.stderr2
3 files changed, 8 insertions, 9 deletions
diff --git a/src/librustc_mir/hair/pattern/check_match.rs b/src/librustc_mir/hair/pattern/check_match.rs
index 9a959cf3064..b0be7462620 100644
--- a/src/librustc_mir/hair/pattern/check_match.rs
+++ b/src/librustc_mir/hair/pattern/check_match.rs
@@ -180,11 +180,8 @@ impl<'tcx> MatchVisitor<'_, 'tcx> {
                         ty::Never => true,
                         ty::Adt(def, _) => {
                             def_span = self.tcx.hir().span_if_local(def.did);
-                            if def.variants.len() < 4 && !def.variants.is_empty() {
-                                // keep around to point at the definition of non-covered variants
-                                missing_variants =
-                                    def.variants.iter().map(|variant| variant.ident).collect();
-                            }
+                            missing_variants =
+                                def.variants.iter().map(|variant| variant.ident).collect();
 
                             def.variants.is_empty() && !cx.is_foreign_non_exhaustive_enum(pat_ty)
                         }
@@ -219,8 +216,10 @@ impl<'tcx> MatchVisitor<'_, 'tcx> {
                         err.span_label(sp, format!("`{}` defined here", pat_ty));
                     }
                     // point at the definition of non-covered enum variants
-                    for variant in &missing_variants {
-                        err.span_label(variant.span, "variant not covered");
+                    if missing_variants.len() < 4 {
+                        for variant in &missing_variants {
+                            err.span_label(variant.span, "variant not covered");
+                        }
                     }
                     err.emit();
                 }
diff --git a/src/test/ui/pattern/usefulness/match-empty.rs b/src/test/ui/pattern/usefulness/match-empty.rs
index 28ebde6c4c1..178d72d1158 100644
--- a/src/test/ui/pattern/usefulness/match-empty.rs
+++ b/src/test/ui/pattern/usefulness/match-empty.rs
@@ -44,5 +44,5 @@ fn main() {
     match NonEmptyEnum2::Foo(true) {}
     //~^ ERROR multiple patterns of type `NonEmptyEnum2` are not handled
     match NonEmptyEnum5::V1 {}
-    //~^ ERROR type `NonEmptyEnum5` is non-empty
+    //~^ ERROR multiple patterns of type `NonEmptyEnum5` are not handled
 }
diff --git a/src/test/ui/pattern/usefulness/match-empty.stderr b/src/test/ui/pattern/usefulness/match-empty.stderr
index eb6cfaa61df..7d220a31ff9 100644
--- a/src/test/ui/pattern/usefulness/match-empty.stderr
+++ b/src/test/ui/pattern/usefulness/match-empty.stderr
@@ -50,7 +50,7 @@ LL |       match NonEmptyEnum2::Foo(true) {}
    |
    = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
 
-error[E0004]: non-exhaustive patterns: type `NonEmptyEnum5` is non-empty
+error[E0004]: non-exhaustive patterns: multiple patterns of type `NonEmptyEnum5` are not handled
   --> $DIR/match-empty.rs:46:11
    |
 LL | / enum NonEmptyEnum5 {