diff options
Diffstat (limited to '')
-rw-r--r-- | src/test/ui/nll/match-guards-partially-borrow.rs | 169 |
1 files changed, 0 insertions, 169 deletions
diff --git a/src/test/ui/nll/match-guards-partially-borrow.rs b/src/test/ui/nll/match-guards-partially-borrow.rs deleted file mode 100644 index 81ae19ebf..000000000 --- a/src/test/ui/nll/match-guards-partially-borrow.rs +++ /dev/null @@ -1,169 +0,0 @@ -// Test that a (partially) mutably borrowed place can be matched on, so long as -// we don't have to read any values that are mutably borrowed to determine -// which arm to take. -// -// Test that we don't allow mutating the value being matched on in a way that -// changes which patterns it matches, until we have chosen an arm. - -fn ok_mutation_in_guard(mut q: i32) { - match q { - // OK, mutation doesn't change which patterns g matches - _ if { q = 1; false } => (), - _ => (), - } -} - -fn ok_mutation_in_guard2(mut u: bool) { - // OK value of u is unused before modification - match u { - _ => (), - _ if { - u = true; - false - } => (), - x => (), - } -} - -fn ok_mutation_in_guard4(mut w: (&mut bool,)) { - // OK value of u is unused before modification - match w { - _ => (), - _ if { - *w.0 = true; - false - } => (), - x => (), - } -} - -fn ok_indirect_mutation_in_guard(mut p: &bool) { - match *p { - // OK, mutation doesn't change which patterns s matches - _ if { - p = &true; - false - } => (), - _ => (), - } -} - -fn mutation_invalidates_pattern_in_guard(mut q: bool) { - match q { - // q doesn't match the pattern with the guard by the end of the guard. - false if { - q = true; //~ ERROR - true - } => (), - _ => (), - } -} - -fn mutation_invalidates_previous_pattern_in_guard(mut r: bool) { - match r { - // r matches a previous pattern by the end of the guard. - true => (), - _ if { - r = true; //~ ERROR - true - } => (), - _ => (), - } -} - -fn match_on_borrowed_early_end(mut s: bool) { - let h = &mut s; - // OK value of s is unused before modification. - match s { - _ if { - *h = !*h; - false - } => (), - true => (), - false => (), - } -} - -fn bad_mutation_in_guard(mut t: bool) { - match t { - true => (), - false if { - t = true; //~ ERROR - false - } => (), - false => (), - } -} - -fn bad_mutation_in_guard2(mut x: Option<Option<&i32>>) { - // Check that nested patterns are checked. - match x { - None => (), - Some(None) => (), - _ if { - match x { - Some(ref mut r) => *r = None, //~ ERROR - _ => return, - }; - false - } => (), - Some(Some(r)) => println!("{}", r), - } -} - -fn bad_mutation_in_guard3(mut t: bool) { - match t { - s if { - t = !t; //~ ERROR - false - } => (), // What value should `s` have in the arm? - _ => (), - } -} - -fn bad_indirect_mutation_in_guard(mut y: &bool) { - match *y { - true => (), - false if { - y = &true; //~ ERROR - false - } => (), - false => (), - } -} - -fn bad_indirect_mutation_in_guard2(mut z: &bool) { - match z { - &true => (), - &false if { - z = &true; //~ ERROR - false - } => (), - &false => (), - } -} - -fn bad_indirect_mutation_in_guard3(mut a: &bool) { - // Same as bad_indirect_mutation_in_guard2, but using match ergonomics - match a { - true => (), - false if { - a = &true; //~ ERROR - false - } => (), - false => (), - } -} - -fn bad_indirect_mutation_in_guard4(mut b: &bool) { - match b { - &_ => (), - &_ if { - b = &true; //~ ERROR - false - } => (), - &b => (), - } -} - -fn main() {} |