Explain exhaustive matching on {usize,isize} maximum values

This commit is contained in:
Yuki Okushi 2020-07-02 02:37:52 +09:00
parent 0cd7ff7ddf
commit dcbe85abad
No known key found for this signature in database
GPG key ID: B0986C85C0E2DAA1
4 changed files with 59 additions and 1 deletions

View file

@ -0,0 +1,21 @@
use std::{usize, isize};
fn main() {
match 0usize {
//~^ ERROR non-exhaustive patterns
//~| NOTE pattern `_` not covered
//~| NOTE the matched value is of type `usize`
//~| NOTE for `usize` and `isize`, no assumptions about the maximum value are permitted
//~| NOTE to exhaustively match on either pointer-size integer type, wildcards must be used
0 ..= usize::MAX => {}
}
match 0isize {
//~^ ERROR non-exhaustive patterns
//~| NOTE pattern `_` not covered
//~| NOTE the matched value is of type `isize`
//~| NOTE for `usize` and `isize`, no assumptions about the maximum value are permitted
//~| NOTE to exhaustively match on either pointer-size integer type, wildcards must be used
isize::MIN ..= isize::MAX => {}
}
}

View file

@ -0,0 +1,25 @@
error[E0004]: non-exhaustive patterns: `_` not covered
--> $DIR/non-exhaustive-pattern-pointer-size-int.rs:4:11
|
LL | match 0usize {
| ^^^^^^ pattern `_` not covered
|
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
= note: the matched value is of type `usize`
= note: for `usize` and `isize`, no assumptions about the maximum value are permitted
= note: to exhaustively match on either pointer-size integer type, wildcards must be used
error[E0004]: non-exhaustive patterns: `_` not covered
--> $DIR/non-exhaustive-pattern-pointer-size-int.rs:13:11
|
LL | match 0isize {
| ^^^^^^ pattern `_` not covered
|
= help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
= note: the matched value is of type `isize`
= note: for `usize` and `isize`, no assumptions about the maximum value are permitted
= note: to exhaustively match on either pointer-size integer type, wildcards must be used
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0004`.