46 lines
992 B
Rust
46 lines
992 B
Rust
|
#![feature(or_patterns)]
|
||
|
|
||
|
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) => {}
|
||
|
_ => {}
|
||
|
}
|
||
|
}
|