1 #![deny(unreachable_patterns)]
3 // We wrap patterns in a tuple because top-level or-patterns were special-cased.
7 (1,) => {} //~ ERROR unreachable pattern
12 (2,) => {} //~ ERROR unreachable pattern
18 (1 | 2,) => {} //~ ERROR unreachable pattern
23 (1, 3) => {} //~ ERROR unreachable pattern
24 (1, 4) => {} //~ ERROR unreachable pattern
25 (2, 4) => {} //~ ERROR unreachable pattern
26 (2 | 1, 4) => {} //~ ERROR unreachable pattern
28 (1, 4 | 5) => {} //~ ERROR unreachable pattern
32 (false | true, false | true) => (),
35 (None | Some(1 | 2),) => {}
36 (Some(1),) => {} //~ ERROR unreachable pattern
37 (None,) => {} //~ ERROR unreachable pattern
41 ((1 | 2,) | (3 | 4,),) => {}
42 ((1..=4,),) => {} //~ ERROR unreachable pattern
47 (1 | 1,) => {} //~ ERROR unreachable
51 (0 | 1) | 1 => {} //~ ERROR unreachable
55 // We get two errors because recursive or-pattern expansion means we don't notice the two
56 // errors span a whole pattern. This could be better but doesn't matter much
58 //~^ ERROR unreachable
59 //~| ERROR unreachable
63 // There is only one error that correctly points to the whole subpattern
65 Some( //~ ERROR unreachable
71 | 0 //~ ERROR unreachable
73 | 0] => {} //~ ERROR unreachable
81 [1 //~ ERROR unreachable
87 [true | false, ..] => {}
93 [true //~ ERROR unreachable
99 (false, Some(true)) => {}
100 (true | false, None | Some(true //~ ERROR unreachable
103 macro_rules! t_or_f {
105 (true //~ ERROR unreachable
110 (true, Some(_)) => {}
111 (false, Some(true)) => {}
112 (true | false, None | Some(t_or_f!())) => {}
116 Some(0 //~ ERROR unreachable
121 // A subpattern that is only unreachable in one branch is overall reachable.
124 (false | true, false | true) => {}
129 (false | true, false | true) => {}
131 // https://github.com/rust-lang/rust/issues/76836
135 | false) => {} //~ ERROR unreachable
138 // A subpattern that is unreachable in all branches is overall unreachable.
143 | true) => {} //~ ERROR unreachable
149 | true, //~ ERROR unreachable