From fbd2cd09e6fd044cad02af97e581853f1875ab2a Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Wed, 11 Dec 2019 18:17:58 +0000 Subject: [PATCH] Revert a diagnostic change in the case of integer ranges --- src/librustc_mir/hair/pattern/_match.rs | 5 +++-- .../ui/pattern/usefulness/match-empty-exhaustive_patterns.rs | 2 +- .../usefulness/match-empty-exhaustive_patterns.stderr | 4 ++-- src/test/ui/pattern/usefulness/match-empty.rs | 2 +- src/test/ui/pattern/usefulness/match-empty.stderr | 4 ++-- src/test/ui/pattern/usefulness/match-non-exhaustive.stderr | 4 ++-- 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 81969bc693101..c372032850695 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 48d9866a9c185..57b6b910ca1da 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 b125718ae2ccf..f242ecf2dae4e 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 3d4030eca6374..f7577125d8a3f 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 a4e143b6782eb..72e3fc0a16744 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 06ec0ba7619f2..211f333882b10 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