diff --git a/src/librustc_mir/hair/pattern/_match.rs b/src/librustc_mir/hair/pattern/_match.rs index 81969bc69310..c37203285069 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 48d9866a9c18..57b6b910ca1d 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 b125718ae2cc..f242ecf2dae4 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 3d4030eca637..f7577125d8a3 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 a4e143b6782e..72e3fc0a1674 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 06ec0ba7619f..211f333882b1 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