1 #![feature(exclusive_range_pattern)]
2 #![deny(unreachable_patterns)]
5 ($s:expr, $t1:pat, $t2:pat) => {
16 m!(0u8, 42, 42); //~ ERROR unreachable pattern
20 m!(0u8, 20..=30, 20); //~ ERROR unreachable pattern
21 m!(0u8, 20..=30, 21); //~ ERROR unreachable pattern
22 m!(0u8, 20..=30, 25); //~ ERROR unreachable pattern
23 m!(0u8, 20..=30, 29); //~ ERROR unreachable pattern
24 m!(0u8, 20..=30, 30); //~ ERROR unreachable pattern
27 m!(0u8, 20..30, 20); //~ ERROR unreachable pattern
28 m!(0u8, 20..30, 21); //~ ERROR unreachable pattern
29 m!(0u8, 20..30, 25); //~ ERROR unreachable pattern
30 m!(0u8, 20..30, 29); //~ ERROR unreachable pattern
34 m!(0u8, 20..=30, 20..=30); //~ ERROR unreachable pattern
35 m!(0u8, 20.. 30, 20.. 30); //~ ERROR unreachable pattern
36 m!(0u8, 20..=30, 20.. 30); //~ ERROR unreachable pattern
37 m!(0u8, 20..=30, 19..=30);
38 m!(0u8, 20..=30, 21..=30); //~ ERROR unreachable pattern
39 m!(0u8, 20..=30, 20..=29); //~ ERROR unreachable pattern
40 m!(0u8, 20..=30, 20..=31);
41 m!('a', 'A'..='z', 'a'..='z'); //~ ERROR unreachable pattern
48 5..=8 => {}, //~ ERROR unreachable pattern
54 5..15 => {}, //~ ERROR unreachable pattern
61 5..25 => {}, //~ ERROR unreachable pattern
69 5..25 => {}, //~ ERROR unreachable pattern
75 5..15 => {}, // FIXME: should be unreachable
78 // Chars between '\u{D7FF}' and '\u{E000}' are invalid even though ranges that contain them are
82 '\u{D7FF}'..='\u{E000}' => {}, //~ ERROR unreachable pattern
85 '\u{0}'..='\u{D7FF}' => {},
86 '\u{E000}'..='\u{10_FFFF}' => {},
87 '\u{D7FF}'..='\u{E000}' => {}, // FIXME should be unreachable
91 (0..=255, false) => {}
92 (0..=255, true) => {} // ok
95 (false, 0..=255) => {}
96 (true, 0..=255) => {} // ok
100 const BAR: &i32 = &42;
103 &FOO => {} //~ ERROR unreachable pattern
104 BAR => {} //~ ERROR unreachable pattern
107 // Regression test, see https://github.com/rust-lang/rust/pull/66326#issuecomment-552889933