1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
#![feature(exclusive_range_pattern)]
#![feature(inline_const_pat)]
#![allow(overlapping_range_endpoints)]
fn main() {
const TOO_BIG: u8 = 256;
match 0u8 {
1..257 => {}
//~^ ERROR literal out of range
1..=256 => {}
//~^ ERROR literal out of range
// overflow is detected in a later pass for these
0..257 => {}
0..=256 => {}
256..=100 => {}
// There isn't really a way to detect these
1..=TOO_BIG => {}
//~^ ERROR lower range bound must be less than or equal to upper
1..=const { 256 } => {}
//~^ ERROR lower range bound must be less than or equal to upper
_ => {}
}
match 0u64 {
10000000000000000000..=99999999999999999999 => {}
//~^ ERROR literal out of range
_ => {}
}
match 0i8 {
0..129 => {}
//~^ ERROR literal out of range
0..=128 => {}
//~^ ERROR literal out of range
-129..0 => {}
//~^ ERROR literal out of range
-10000..=-20 => {}
//~^ ERROR literal out of range
// overflow is detected in a later pass for these
128..=0 => {}
0..-129 => {}
-10000..=0 => {}
_ => {}
}
// FIXME: error message is confusing
match 0i8 {
//~^ ERROR `i8::MIN..=-17_i8` and `1_i8..=i8::MAX` not covered
-10000..=0 => {}
}
match 0i8 {
//~^ ERROR `i8::MIN..=-17_i8` not covered
-10000.. => {}
}
}
|