| // 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() {} |