about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_mir/hair/pattern/_match.rs5
-rw-r--r--src/test/ui/pattern/usefulness/match-empty-exhaustive_patterns.rs2
-rw-r--r--src/test/ui/pattern/usefulness/match-empty-exhaustive_patterns.stderr4
-rw-r--r--src/test/ui/pattern/usefulness/match-empty.rs2
-rw-r--r--src/test/ui/pattern/usefulness/match-empty.stderr4
-rw-r--r--src/test/ui/pattern/usefulness/match-non-exhaustive.stderr4
6 files changed, 11 insertions, 10 deletions
diff --git a/src/librustc_mir/hair/pattern/_match.rs b/src/librustc_mir/hair/pattern/_match.rs
index 81969bc6931..c3720328506 100644
--- a/src/librustc_mir/hair/pattern/_match.rs
+++ b/src/librustc_mir/hair/pattern/_match.rs
@@ -1778,8 +1778,9 @@ pub fn is_useful<'p, 'tcx>(
             // satisfied with `(_, _, true)`. In this case,
             // `used_ctors` is empty.
             // The exception is: if we are at the top-level, for example in an empty match, we
-            // prefer reporting the list of constructors instead of just `_`.
-            if missing_ctors.all_ctors_are_missing() && !is_top_level {
+            // sometimes prefer reporting the list of constructors instead of just `_`.
+            let report_ctors_rather_than_wildcard = is_top_level && !IntRange::is_integral(pcx.ty);
+            if missing_ctors.all_ctors_are_missing() && !report_ctors_rather_than_wildcard {
                 // All constructors are unused. Add a wild pattern
                 // rather than each individual constructor.
                 usefulness.apply_wildcard(pcx.ty)
diff --git a/src/test/ui/pattern/usefulness/match-empty-exhaustive_patterns.rs b/src/test/ui/pattern/usefulness/match-empty-exhaustive_patterns.rs
index 48d9866a9c1..57b6b910ca1 100644
--- a/src/test/ui/pattern/usefulness/match-empty-exhaustive_patterns.rs
+++ b/src/test/ui/pattern/usefulness/match-empty-exhaustive_patterns.rs
@@ -77,7 +77,7 @@ fn main() {
     //~^ ERROR `V1`, `V2`, `V3` and 2 more not covered
 
     match_false!(0u8);
-    //~^ ERROR `0u8..=std::u8::MAX` not covered
+    //~^ ERROR `_` not covered
     match_false!(NonEmptyStruct(true));
     //~^ ERROR `NonEmptyStruct(_)` not covered
     match_false!((NonEmptyUnion1 { foo: () }));
diff --git a/src/test/ui/pattern/usefulness/match-empty-exhaustive_patterns.stderr b/src/test/ui/pattern/usefulness/match-empty-exhaustive_patterns.stderr
index b125718ae2c..f242ecf2dae 100644
--- a/src/test/ui/pattern/usefulness/match-empty-exhaustive_patterns.stderr
+++ b/src/test/ui/pattern/usefulness/match-empty-exhaustive_patterns.stderr
@@ -123,11 +123,11 @@ LL |       match_empty!(NonEmptyEnum5::V1);
    |
    = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
 
-error[E0004]: non-exhaustive patterns: `0u8..=std::u8::MAX` not covered
+error[E0004]: non-exhaustive patterns: `_` not covered
   --> $DIR/match-empty-exhaustive_patterns.rs:79:18
    |
 LL |     match_false!(0u8);
-   |                  ^^^ pattern `0u8..=std::u8::MAX` not covered
+   |                  ^^^ pattern `_` not covered
    |
    = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
 
diff --git a/src/test/ui/pattern/usefulness/match-empty.rs b/src/test/ui/pattern/usefulness/match-empty.rs
index 3d4030eca63..f7577125d8a 100644
--- a/src/test/ui/pattern/usefulness/match-empty.rs
+++ b/src/test/ui/pattern/usefulness/match-empty.rs
@@ -76,7 +76,7 @@ fn main() {
     //~^ ERROR `V1`, `V2`, `V3` and 2 more not covered
 
     match_false!(0u8);
-    //~^ ERROR `0u8..=std::u8::MAX` not covered
+    //~^ ERROR `_` not covered
     match_false!(NonEmptyStruct(true));
     //~^ ERROR `NonEmptyStruct(_)` not covered
     match_false!((NonEmptyUnion1 { foo: () }));
diff --git a/src/test/ui/pattern/usefulness/match-empty.stderr b/src/test/ui/pattern/usefulness/match-empty.stderr
index a4e143b6782..72e3fc0a167 100644
--- a/src/test/ui/pattern/usefulness/match-empty.stderr
+++ b/src/test/ui/pattern/usefulness/match-empty.stderr
@@ -104,11 +104,11 @@ LL |       match_empty!(NonEmptyEnum5::V1);
    |
    = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
 
-error[E0004]: non-exhaustive patterns: `0u8..=std::u8::MAX` not covered
+error[E0004]: non-exhaustive patterns: `_` not covered
   --> $DIR/match-empty.rs:78:18
    |
 LL |     match_false!(0u8);
-   |                  ^^^ pattern `0u8..=std::u8::MAX` not covered
+   |                  ^^^ pattern `_` not covered
    |
    = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
 
diff --git a/src/test/ui/pattern/usefulness/match-non-exhaustive.stderr b/src/test/ui/pattern/usefulness/match-non-exhaustive.stderr
index 06ec0ba7619..211f333882b 100644
--- a/src/test/ui/pattern/usefulness/match-non-exhaustive.stderr
+++ b/src/test/ui/pattern/usefulness/match-non-exhaustive.stderr
@@ -6,11 +6,11 @@ LL |     match 0 { 1 => () }
    |
    = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
 
-error[E0004]: non-exhaustive patterns: `std::i32::MIN..=std::i32::MAX` not covered
+error[E0004]: non-exhaustive patterns: `_` not covered
   --> $DIR/match-non-exhaustive.rs:3:11
    |
 LL |     match 0 { 0 if false => () }
-   |           ^ pattern `std::i32::MIN..=std::i32::MAX` not covered
+   |           ^ pattern `_` not covered
    |
    = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms