about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-06-07 10:17:38 -0700
committerbors <bors@rust-lang.org>2014-06-07 10:17:38 -0700
commitffdb881337911e65f25dba2dc6e67aed29ffa4cc (patch)
tree85207b4a0f0104200e195a794ef3c0f7f0307596
parent8e9e484d7089590ce63bfe21723d7ee0c50be8f4 (diff)
parent4666792ac600f4e4e1c09a37b88f40f6125b57b8 (diff)
downloadrust-ffdb881337911e65f25dba2dc6e67aed29ffa4cc.tar.gz
rust-ffdb881337911e65f25dba2dc6e67aed29ffa4cc.zip
auto merge of #14717 : zwarich/rust/borrowck-tests, r=cmr
After sitting down to build on the work merged in #14318, I realized that some of the test names were not clear, others probably weren't testing the right thing, and they were also not as exhaustive as they could have been.
-rw-r--r--src/test/compile-fail/borrowck-field-sensitivity.rs58
-rw-r--r--src/test/run-pass/borrowck-field-sensitivity.rs159
2 files changed, 133 insertions, 84 deletions
diff --git a/src/test/compile-fail/borrowck-field-sensitivity.rs b/src/test/compile-fail/borrowck-field-sensitivity.rs
index 4363f85048f..2fa9067af54 100644
--- a/src/test/compile-fail/borrowck-field-sensitivity.rs
+++ b/src/test/compile-fail/borrowck-field-sensitivity.rs
@@ -10,15 +10,13 @@
 
 struct A { a: int, b: Box<int> }
 
-fn borrow<T>(_: &T) { }
-
-fn use_after_move() {
+fn deref_after_move() {
     let x = A { a: 1, b: box 2 };
     drop(x.b);
     drop(*x.b); //~ ERROR use of partially moved value: `*x.b`
 }
 
-fn use_after_fu_move() {
+fn deref_after_fu_move() {
     let x = A { a: 1, b: box 2 };
     let y = A { a: 3, .. x };
     drop(*x.b); //~ ERROR use of partially moved value: `*x.b`
@@ -27,35 +25,37 @@ fn use_after_fu_move() {
 fn borrow_after_move() {
     let x = A { a: 1, b: box 2 };
     drop(x.b);
-    borrow(&x.b); //~ ERROR use of moved value: `x.b`
+    let p = &x.b; //~ ERROR use of moved value: `x.b`
+    drop(**p);
 }
 
 fn borrow_after_fu_move() {
     let x = A { a: 1, b: box 2 };
     let _y = A { a: 3, .. x };
-    borrow(&x.b); //~ ERROR use of moved value: `x.b`
+    let p = &x.b; //~ ERROR use of moved value: `x.b`
+    drop(**p);
 }
 
 fn move_after_borrow() {
     let x = A { a: 1, b: box 2 };
-    let y = &x.b;
+    let p = &x.b;
     drop(x.b); //~ ERROR cannot move out of `x.b` because it is borrowed
-    borrow(&*y);
+    drop(**p);
 }
 
 fn fu_move_after_borrow() {
     let x = A { a: 1, b: box 2 };
-    let y = &x.b;
-    let _z = A { a: 3, .. x }; //~ ERROR cannot move out of `x.b` because it is borrowed
-    borrow(&*y);
+    let p = &x.b;
+    let _y = A { a: 3, .. x }; //~ ERROR cannot move out of `x.b` because it is borrowed
+    drop(**p);
 }
 
 fn mut_borrow_after_mut_borrow() {
     let mut x = A { a: 1, b: box 2 };
-    let y = &mut x.a;
-    let z = &mut x.a; //~ ERROR cannot borrow `x.a` as mutable more than once at a time
-    drop(*y);
-    drop(*z);
+    let p = &mut x.a;
+    let q = &mut x.a; //~ ERROR cannot borrow `x.a` as mutable more than once at a time
+    drop(*p);
+    drop(*q);
 }
 
 fn move_after_move() {
@@ -84,7 +84,21 @@ fn fu_move_after_fu_move() {
 
 // The following functions aren't yet accepted, but they should be.
 
-fn use_after_field_assign_after_uninit() {
+fn move_after_borrow_correct() {
+    let x = A { a: 1, b: box 2 };
+    let p = &x.a;
+    drop(x.b); //~ ERROR cannot move out of `x.b` because it is borrowed
+    drop(*p);
+}
+
+fn fu_move_after_borrow_correct() {
+    let x = A { a: 1, b: box 2 };
+    let p = &x.a;
+    let _y = A { a: 3, .. x }; //~ ERROR cannot move out of `x.b` because it is borrowed
+    drop(*p);
+}
+
+fn copy_after_field_assign_after_uninit() {
     let mut x: A;
     x.a = 1;
     drop(x.a); //~ ERROR use of possibly uninitialized variable: `x.a`
@@ -93,7 +107,8 @@ fn use_after_field_assign_after_uninit() {
 fn borrow_after_field_assign_after_uninit() {
     let mut x: A;
     x.a = 1;
-    borrow(&x.a); //~ ERROR use of possibly uninitialized variable: `x.a`
+    let p = &x.a; //~ ERROR use of possibly uninitialized variable: `x.a`
+    drop(*p);
 }
 
 fn move_after_field_assign_after_uninit() {
@@ -103,8 +118,8 @@ fn move_after_field_assign_after_uninit() {
 }
 
 fn main() {
-    use_after_move();
-    use_after_fu_move();
+    deref_after_move();
+    deref_after_fu_move();
 
     borrow_after_move();
     borrow_after_fu_move();
@@ -117,7 +132,10 @@ fn main() {
     fu_move_after_move();
     fu_move_after_fu_move();
 
-    use_after_field_assign_after_uninit();
+    move_after_borrow_correct();
+    fu_move_after_borrow_correct();
+
+    copy_after_field_assign_after_uninit();
     borrow_after_field_assign_after_uninit();
     move_after_field_assign_after_uninit();
 }
diff --git a/src/test/run-pass/borrowck-field-sensitivity.rs b/src/test/run-pass/borrowck-field-sensitivity.rs
index 3b82f51123f..a297300daf1 100644
--- a/src/test/run-pass/borrowck-field-sensitivity.rs
+++ b/src/test/run-pass/borrowck-field-sensitivity.rs
@@ -11,92 +11,74 @@
 struct A { a: int, b: Box<int> }
 struct B { a: Box<int>, b: Box<int> }
 
-fn borrow<T>(_: &T) { }
-
-fn move_after_use() {
+fn move_after_copy() {
     let x = A { a: 1, b: box 2 };
     drop(x.a);
     drop(x.b);
 }
 
-fn move_after_fu_use() {
+fn move_after_fu_copy() {
     let x = A { a: 1, b: box 2 };
     let _y = A { b: box 3, .. x };
     drop(x.b);
 }
 
-fn fu_move_after_use() {
+fn fu_move_after_copy() {
     let x = A { a: 1, b: box 2 };
     drop(x.a);
-    let y = A { a: 3, .. x };
-    drop(y.b);
+    let _y = A { a: 3, .. x };
 }
 
-fn fu_move_after_fu_use() {
+fn fu_move_after_fu_copy() {
     let x = A { a: 1, b: box 2 };
     let _y = A { b: box 3, .. x };
-    let z = A { a: 4, .. x };
-    drop(z.b);
+    let _z = A { a: 4, .. x };
 }
 
-fn use_after_move() {
+fn copy_after_move() {
     let x = A { a: 1, b: box 2 };
     drop(x.b);
     drop(x.a);
 }
 
-fn use_after_fu_move() {
+fn copy_after_fu_move() {
     let x = A { a: 1, b: box 2 };
     let y = A { a: 3, .. x };
     drop(x.a);
-    drop(y.b);
 }
 
-fn fu_use_after_move() {
+fn fu_copy_after_move() {
     let x = A { a: 1, b: box 2 };
     drop(x.b);
     let _y = A { b: box 3, .. x };
 }
 
-fn fu_use_after_fu_move() {
+fn fu_copy_after_fu_move() {
     let x = A { a: 1, b: box 2 };
-    let y = A { a: 3, .. x };
+    let _y = A { a: 3, .. x };
     let _z = A { b: box 3, .. x };
-    drop(y.b);
 }
 
 fn borrow_after_move() {
     let x = A { a: 1, b: box 2 };
     drop(x.b);
-    borrow(&x.a);
+    let p = &x.a;
+    drop(*p);
 }
 
 fn borrow_after_fu_move() {
     let x = A { a: 1, b: box 2 };
-    let y = A { a: 3, .. x };
-    borrow(&x.a);
-    drop(y.b);
-}
-
-fn move_after_borrow() {
-    let x = A { a: 1, b: box 2 };
-    borrow(&x.a);
-    drop(x.b);
-}
-
-fn fu_move_after_borrow() {
-    let x = A { a: 1, b: box 2 };
-    borrow(&x.a);
-    let y = A { a: 3, .. x };
-    drop(y.b);
+    let _y = A { a: 3, .. x };
+    let p = &x.a;
+    drop(*p);
 }
 
 fn mut_borrow_after_mut_borrow() {
     let mut x = A { a: 1, b: box 2 };
-    let y = &mut x.a;
-    let z = &mut x.b;
-    drop(*y);
-    drop(**z);
+    let p = &mut x.a;
+    let q = &mut x.b;
+    drop(*p);
+    drop(**q);
 }
 
 fn move_after_move() {
@@ -109,7 +91,6 @@ fn move_after_fu_move() {
     let x = B { a: box 1, b: box 2 };
     let y = B { a: box 3, .. x };
     drop(x.a);
-    drop(y.b);
 }
 
 fn fu_move_after_move() {
@@ -121,46 +102,82 @@ fn fu_move_after_move() {
 
 fn fu_move_after_fu_move() {
     let x = B { a: box 1, b: box 2 };
-    let y = B { b: box 3, .. x };
-    let z = B { a: box 4, .. x };
-    drop(y.a);
-    drop(z.b);
+    let _y = B { b: box 3, .. x };
+    let _z = B { a: box 4, .. x };
 }
 
-fn use_after_assign_after_move() {
+fn copy_after_assign_after_move() {
     let mut x = A { a: 1, b: box 2 };
     drop(x.b);
     x = A { a: 3, b: box 4 };
     drop(*x.b);
 }
 
-fn use_after_field_assign_after_move() {
+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);
     x.b = box 3;
     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);
     x = A { a: 3, b: box 4 };
-    borrow(&x.b);
+    let p = &x.b;
+    drop(**p);
+}
+
+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 };
+    let p = &x.b;
+    drop(**p);
 }
 
 fn borrow_after_field_assign_after_move() {
     let mut x = A { a: 1, b: box 2 };
     drop(x.b);
     x.b = box 3;
-    borrow(&x.b);
+    let p = &x.b;
+    drop(**p);
+}
+
+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;
+    let p = &x.b;
+    drop(**p);
 }
 
 fn move_after_assign_after_move() {
     let mut x = A { a: 1, b: box 2 };
-    let y = x.b;
+    let _y = x.b;
+    x = A { a: 3, b: box 4 };
+    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);
-    drop(y);
 }
 
 fn move_after_field_assign_after_move() {
@@ -170,7 +187,14 @@ fn move_after_field_assign_after_move() {
     drop(x.b);
 }
 
-fn use_after_assign_after_uninit() {
+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 };
     drop(x.a);
@@ -179,7 +203,8 @@ fn use_after_assign_after_uninit() {
 fn borrow_after_assign_after_uninit() {
     let mut x: A;
     x = A { a: 1, b: box 2 };
-    borrow(&x.a);
+    let p = &x.a;
+    drop(*p);
 }
 
 fn move_after_assign_after_uninit() {
@@ -189,19 +214,17 @@ fn move_after_assign_after_uninit() {
 }
 
 fn main() {
-    move_after_use();
-    move_after_fu_use();
-    fu_move_after_use();
-    fu_move_after_fu_use();
-    use_after_move();
-    use_after_fu_move();
-    fu_use_after_move();
-    fu_use_after_fu_move();
+    move_after_copy();
+    move_after_fu_copy();
+    fu_move_after_copy();
+    fu_move_after_fu_copy();
+    copy_after_move();
+    copy_after_fu_move();
+    fu_copy_after_move();
+    fu_copy_after_fu_move();
 
     borrow_after_move();
     borrow_after_fu_move();
-    move_after_borrow();
-    fu_move_after_borrow();
     mut_borrow_after_mut_borrow();
 
     move_after_move();
@@ -209,14 +232,22 @@ fn main() {
     fu_move_after_move();
     fu_move_after_fu_move();
 
-    use_after_assign_after_move();
-    use_after_field_assign_after_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();
 
-    use_after_assign_after_uninit();
+    copy_after_assign_after_uninit();
     borrow_after_assign_after_uninit();
     move_after_assign_after_uninit();
 }