diff --git a/src/librustc_mir/hair/pattern/check_match.rs b/src/librustc_mir/hair/pattern/check_match.rs index 9a959cf306432..b0be746262093 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 28ebde6c4c173..178d72d11584b 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 eb6cfaa61df82..7d220a31ff969 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 {