51 lines
1.7 KiB
Plaintext
51 lines
1.7 KiB
Plaintext
|
1| |#![feature(or_patterns)]
|
||
|
2| |
|
||
|
3| 1|fn main() {
|
||
|
4| 1| // Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||
|
5| 1| // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||
|
6| 1| // dependent conditions.
|
||
|
7| 1| let is_true = std::env::args().len() == 1;
|
||
|
8| 1|
|
||
|
9| 1| let mut a: u8 = 0;
|
||
|
10| 1| let mut b: u8 = 0;
|
||
|
11| 1| if is_true {
|
||
|
12| 1| a = 2;
|
||
|
13| 1| b = 0;
|
||
|
14| 1| }
|
||
|
^0
|
||
|
15| 1| match (a, b) {
|
||
|
16| | // Or patterns generate MIR `SwitchInt` with multiple targets to the same `BasicBlock`.
|
||
|
17| | // This test confirms a fix for Issue #79569.
|
||
|
18| 0| (0 | 1, 2 | 3) => {}
|
||
|
19| 1| _ => {}
|
||
|
20| | }
|
||
|
21| 1| if is_true {
|
||
|
22| 1| a = 0;
|
||
|
23| 1| b = 0;
|
||
|
24| 1| }
|
||
|
^0
|
||
|
25| 1| match (a, b) {
|
||
|
26| 0| (0 | 1, 2 | 3) => {}
|
||
|
27| 1| _ => {}
|
||
|
28| | }
|
||
|
29| 1| if is_true {
|
||
|
30| 1| a = 2;
|
||
|
31| 1| b = 2;
|
||
|
32| 1| }
|
||
|
^0
|
||
|
33| 1| match (a, b) {
|
||
|
34| 0| (0 | 1, 2 | 3) => {}
|
||
|
35| 1| _ => {}
|
||
|
36| | }
|
||
|
37| 1| if is_true {
|
||
|
38| 1| a = 0;
|
||
|
39| 1| b = 2;
|
||
|
40| 1| }
|
||
|
^0
|
||
|
41| 1| match (a, b) {
|
||
|
42| 1| (0 | 1, 2 | 3) => {}
|
||
|
43| 0| _ => {}
|
||
|
44| | }
|
||
|
45| 1|}
|
||
|
|