about summary refs log tree commit diff
path: root/tests/ui/nll/match-cfg-fake-edges2.rs
blob: ac90fb9cd1e762398862c87a8de8e85ed97e97dd (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
// Test that we have enough false edges to avoid exposing the exact matching
// algorithm in borrow checking.

fn all_previous_tests_may_be_done(y: &mut (bool, bool)) {
    let r = &mut y.1;
    // We don't actually test y.1 to select the second arm, but we don't want
    // borrowck results to be based on the order we match patterns.
    match y {
        //~^ ERROR cannot use `y.1` because it was mutably borrowed
        (false, true) => {}
        // Borrowck must not know we don't test `y.1` when `y.0` is `true`.
        (true, _) => drop(r),
        (false, _) => {}
    };

    // Fine in the other order.
    let r = &mut y.1;
    match y {
        (true, _) => drop(r),
        (false, true) => {}
        (false, _) => {}
    };
}

fn main() {}