Before, the SwitchInt cases were computed in two passes: if the first pass accepted e.g. 0..=5 and then 1, the second pass would not accept 0..=5 anymore because 1 would be listed in the SwitchInt options. Now there's a single pass, so if we sort 0..=5 we must take care to not sort a subsequent 1.
15 lines
461 B
Rust
15 lines
461 B
Rust
//@ run-pass
|
|
//
|
|
// Regression test for match lowering to MIR: when gathering candidates, by the time we get to the
|
|
// range we know the range will only match on the failure case of the switchint. Hence we mustn't
|
|
// add the `1` to the switchint or the range would be incorrectly sorted.
|
|
#![allow(unreachable_patterns)]
|
|
fn main() {
|
|
match 1 {
|
|
10 => unreachable!(),
|
|
0..=5 => {}
|
|
1 => unreachable!(),
|
|
_ => unreachable!(),
|
|
}
|
|
}
|