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
|
fn main() {
// Initialize test constants in a way that cannot be determined at compile time, to ensure
// rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
// dependent conditions.
let is_true = std::env::args().len() == 1;
let mut a: u8 = 0;
let mut b: u8 = 0;
if is_true {
a = 2;
b = 0;
}
match (a, b) {
// Or patterns generate MIR `SwitchInt` with multiple targets to the same `BasicBlock`.
// This test confirms a fix for Issue #79569.
(0 | 1, 2 | 3) => {}
_ => {}
}
if is_true {
a = 0;
b = 0;
}
match (a, b) {
(0 | 1, 2 | 3) => {}
_ => {}
}
if is_true {
a = 2;
b = 2;
}
match (a, b) {
(0 | 1, 2 | 3) => {}
_ => {}
}
if is_true {
a = 0;
b = 2;
}
match (a, b) {
(0 | 1, 2 | 3) => {}
_ => {}
}
}
|