| 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) => {} |
| _ => {} |
| } |
| } |