-
Notifications
You must be signed in to change notification settings - Fork 12.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
2,606 additions
and
502 deletions.
There are no files selected for viewing
63 changes: 63 additions & 0 deletions
63
tests/ui/pattern/usefulness/empty-match-check-notes.exhaustive_patterns.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
error: unreachable pattern | ||
--> $DIR/empty-match-check-notes.rs:17:9 | ||
| | ||
LL | _ => {} | ||
| ^ | ||
| | ||
note: the lint level is defined here | ||
--> $DIR/empty-match-check-notes.rs:7:9 | ||
| | ||
LL | #![deny(unreachable_patterns)] | ||
| ^^^^^^^^^^^^^^^^^^^^ | ||
|
||
error: unreachable pattern | ||
--> $DIR/empty-match-check-notes.rs:20:9 | ||
| | ||
LL | _ if false => {} | ||
| ^ | ||
|
||
error: unreachable pattern | ||
--> $DIR/empty-match-check-notes.rs:27:9 | ||
| | ||
LL | _ => {} | ||
| ^ | ||
|
||
error: unreachable pattern | ||
--> $DIR/empty-match-check-notes.rs:30:9 | ||
| | ||
LL | _ if false => {} | ||
| ^ | ||
|
||
error[E0005]: refutable pattern in local binding | ||
--> $DIR/empty-match-check-notes.rs:35:9 | ||
| | ||
LL | let None = x; | ||
| ^^^^ pattern `Some(_)` not covered | ||
| | ||
= note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant | ||
= note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html | ||
= note: pattern `Some(_)` is currently uninhabited, but this variant contains private fields which may become inhabited in the future | ||
= note: the matched value is of type `Option<SecretlyUninhabitedForeignStruct>` | ||
help: you might want to use `if let` to ignore the variant that isn't matched | ||
| | ||
LL | if let None = x { todo!() }; | ||
| ++ +++++++++++ | ||
|
||
error[E0004]: non-exhaustive patterns: `_` not covered | ||
--> $DIR/empty-match-check-notes.rs:45:11 | ||
| | ||
LL | match 0u8 { | ||
| ^^^ pattern `_` not covered | ||
| | ||
= note: the matched value is of type `u8` | ||
= note: match arms with guards don't count towards exhaustivity | ||
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown | ||
| | ||
LL ~ _ if false => {}, | ||
LL + _ => todo!() | ||
| | ||
|
||
error: aborting due to 6 previous errors | ||
|
||
Some errors have detailed explanations: E0004, E0005. | ||
For more information about an error, try `rustc --explain E0004`. |
62 changes: 62 additions & 0 deletions
62
tests/ui/pattern/usefulness/empty-match-check-notes.normal.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
error: unreachable pattern | ||
--> $DIR/empty-match-check-notes.rs:17:9 | ||
| | ||
LL | _ => {} | ||
| ^ | ||
| | ||
note: the lint level is defined here | ||
--> $DIR/empty-match-check-notes.rs:7:9 | ||
| | ||
LL | #![deny(unreachable_patterns)] | ||
| ^^^^^^^^^^^^^^^^^^^^ | ||
|
||
error: unreachable pattern | ||
--> $DIR/empty-match-check-notes.rs:20:9 | ||
| | ||
LL | _ if false => {} | ||
| ^ | ||
|
||
error: unreachable pattern | ||
--> $DIR/empty-match-check-notes.rs:27:9 | ||
| | ||
LL | _ => {} | ||
| ^ | ||
|
||
error: unreachable pattern | ||
--> $DIR/empty-match-check-notes.rs:30:9 | ||
| | ||
LL | _ if false => {} | ||
| ^ | ||
|
||
error[E0005]: refutable pattern in local binding | ||
--> $DIR/empty-match-check-notes.rs:35:9 | ||
| | ||
LL | let None = x; | ||
| ^^^^ pattern `Some(_)` not covered | ||
| | ||
= note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant | ||
= note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html | ||
= note: the matched value is of type `Option<SecretlyUninhabitedForeignStruct>` | ||
help: you might want to use `if let` to ignore the variant that isn't matched | ||
| | ||
LL | if let None = x { todo!() }; | ||
| ++ +++++++++++ | ||
|
||
error[E0004]: non-exhaustive patterns: `_` not covered | ||
--> $DIR/empty-match-check-notes.rs:45:11 | ||
| | ||
LL | match 0u8 { | ||
| ^^^ pattern `_` not covered | ||
| | ||
= note: the matched value is of type `u8` | ||
= note: match arms with guards don't count towards exhaustivity | ||
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown | ||
| | ||
LL ~ _ if false => {}, | ||
LL + _ => todo!() | ||
| | ||
|
||
error: aborting due to 6 previous errors | ||
|
||
Some errors have detailed explanations: E0004, E0005. | ||
For more information about an error, try `rustc --explain E0004`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// aux-build:empty.rs | ||
// revisions: normal exhaustive_patterns | ||
// | ||
// This tests a match with no arms on various types, and checks NOTEs. | ||
#![feature(never_type)] | ||
#![cfg_attr(exhaustive_patterns, feature(exhaustive_patterns))] | ||
#![deny(unreachable_patterns)] | ||
//~^ NOTE the lint level is defined here | ||
|
||
extern crate empty; | ||
|
||
enum EmptyEnum {} | ||
|
||
fn empty_enum(x: EmptyEnum) { | ||
match x {} // ok | ||
match x { | ||
_ => {} //~ ERROR unreachable pattern | ||
} | ||
match x { | ||
_ if false => {} //~ ERROR unreachable pattern | ||
} | ||
} | ||
|
||
fn empty_foreign_enum(x: empty::EmptyForeignEnum) { | ||
match x {} // ok | ||
match x { | ||
_ => {} //~ ERROR unreachable pattern | ||
} | ||
match x { | ||
_ if false => {} //~ ERROR unreachable pattern | ||
} | ||
} | ||
|
||
fn empty_foreign_enum_private(x: Option<empty::SecretlyUninhabitedForeignStruct>) { | ||
let None = x; | ||
//~^ ERROR refutable pattern in local binding | ||
//~| NOTE `let` bindings require an "irrefutable pattern" | ||
//~| NOTE for more information, visit | ||
//~| NOTE the matched value is of type | ||
//~| NOTE pattern `Some(_)` not covered | ||
//[exhaustive_patterns]~| NOTE currently uninhabited, but this variant contains private fields | ||
} | ||
|
||
fn main() { | ||
match 0u8 { | ||
//~^ ERROR `_` not covered | ||
//~| NOTE the matched value is of type | ||
//~| NOTE match arms with guards don't count towards exhaustivity | ||
//~| NOTE pattern `_` not covered | ||
_ if false => {} | ||
} | ||
} |
Oops, something went wrong.