about summary refs log tree commit diff
path: root/tests/ui/loop-match/diverges.rs
blob: f1b3ffb2076bd250bcaaff5d9923e4f4048bc229 (plain)
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
44
//@ build-pass
//@ compile-flags: -Zvalidate-mir
#![allow(incomplete_features)]
#![feature(loop_match)]
#![crate_type = "lib"]

// Test that a #[loop_match] without an explicit break from the loop generates valid MIR.

fn break_to_block_unit() -> u8 {
    let mut state = 0;
    #[loop_match]
    loop {
        state = 'blk: {
            match state {
                _ => 'b: {
                    break 'b 2;
                }
            }
        }
    }
}

fn break_to_block_value() -> u8 {
    let mut state = 0u8;
    #[loop_match]
    'a: loop {
        state = 'blk: {
            match state {
                _ => break 'blk state,
            }
        }
    }
}

fn infinite_a(mut state: u8) {
    #[loop_match]
    loop {
        state = 'blk: {
            match state {
                a => a,
            }
        }
    }
}