From 61c81bf00cc8f8a87940fce3ba7be0bfd66cf04f Mon Sep 17 00:00:00 2001 From: Cameron Zwarich Date: Sat, 7 Jun 2014 00:44:01 -0700 Subject: [PATCH] Add more borrowck tests for functional update moves Add more borrowck field-sensitivity tests for functional update moves. This makes the collection of test functions more combinatorially exhaustive. --- .../run-pass/borrowck-field-sensitivity.rs | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/test/run-pass/borrowck-field-sensitivity.rs b/src/test/run-pass/borrowck-field-sensitivity.rs index 202df70f5d2..7f9a1427d72 100644 --- a/src/test/run-pass/borrowck-field-sensitivity.rs +++ b/src/test/run-pass/borrowck-field-sensitivity.rs @@ -125,6 +125,13 @@ fn copy_after_assign_after_move() { drop(*x.b); } +fn copy_after_assign_after_fu_move() { + let mut x = A { a: 1, b: box 2 }; + let _y = A { a: 3, .. x }; + x = A { a: 3, b: box 4 }; + drop(*x.b); +} + fn copy_after_field_assign_after_move() { let mut x = A { a: 1, b: box 2 }; drop(x.b); @@ -132,6 +139,13 @@ fn copy_after_field_assign_after_move() { drop(*x.b); } +fn copy_after_field_assign_after_fu_move() { + let mut x = A { a: 1, b: box 2 }; + let _y = A { a: 3, .. x }; + x.b = box 3; + drop(*x.b); +} + fn borrow_after_assign_after_move() { let mut x = A { a: 1, b: box 2 }; drop(x.b); @@ -139,6 +153,13 @@ fn borrow_after_assign_after_move() { borrow(&x.b); } +fn borrow_after_assign_after_fu_move() { + let mut x = A { a: 1, b: box 2 }; + let _y = A { a: 3, .. x }; + x = A { a: 3, b: box 4 }; + borrow(&x.b); +} + fn borrow_after_field_assign_after_move() { let mut x = A { a: 1, b: box 2 }; drop(x.b); @@ -146,6 +167,13 @@ fn borrow_after_field_assign_after_move() { borrow(&x.b); } +fn borrow_after_field_assign_after_fu_move() { + let mut x = A { a: 1, b: box 2 }; + let _y = A { a: 3, .. x }; + x.b = box 3; + borrow(&x.b); +} + fn move_after_assign_after_move() { let mut x = A { a: 1, b: box 2 }; let _y = x.b; @@ -153,6 +181,13 @@ fn move_after_assign_after_move() { drop(x.b); } +fn move_after_assign_after_fu_move() { + let mut x = A { a: 1, b: box 2 }; + let _y = A { a: 3, .. x }; + x = A { a: 3, b: box 4 }; + drop(x.b); +} + fn move_after_field_assign_after_move() { let mut x = A { a: 1, b: box 2 }; drop(x.b); @@ -160,6 +195,13 @@ fn move_after_field_assign_after_move() { drop(x.b); } +fn move_after_field_assign_after_fu_move() { + let mut x = A { a: 1, b: box 2 }; + let _y = A { a: 3, .. x }; + x.b = box 3; + drop(x.b); +} + fn copy_after_assign_after_uninit() { let mut x: A; x = A { a: 1, b: box 2 }; @@ -200,11 +242,19 @@ fn main() { fu_move_after_fu_move(); copy_after_assign_after_move(); + copy_after_assign_after_fu_move(); copy_after_field_assign_after_move(); + copy_after_field_assign_after_fu_move(); + borrow_after_assign_after_move(); + borrow_after_assign_after_fu_move(); borrow_after_field_assign_after_move(); + borrow_after_field_assign_after_fu_move(); + move_after_assign_after_move(); + move_after_assign_after_fu_move(); move_after_field_assign_after_move(); + move_after_field_assign_after_fu_move(); copy_after_assign_after_uninit(); borrow_after_assign_after_uninit();