about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/test/compile-fail/borrowck-borrow-overloaded-auto-deref-mut.rs22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/test/compile-fail/borrowck-borrow-overloaded-auto-deref-mut.rs b/src/test/compile-fail/borrowck-borrow-overloaded-auto-deref-mut.rs
index 9800fd704ac..e43ac98aa98 100644
--- a/src/test/compile-fail/borrowck-borrow-overloaded-auto-deref-mut.rs
+++ b/src/test/compile-fail/borrowck-borrow-overloaded-auto-deref-mut.rs
@@ -77,6 +77,21 @@ fn deref_extend_mut_field2<'a>(x: &'a mut Own<Point>) -> &'a mut int {
     &mut x.y
 }
 
+fn deref_extend_mut_field3<'a>(x: &'a mut Own<Point>) {
+    // Hmm, this is unfortunate, because with ~ it would work,
+    // but it's presently the expected outcome. See `deref_extend_mut_field4`
+    // for the workaround.
+
+    let _x = &mut x.x;
+    let _y = &mut x.y; //~ ERROR cannot borrow
+}
+
+fn deref_extend_mut_field4<'a>(x: &'a mut Own<Point>) {
+    let p = &mut **x;
+    let _x = &mut p.x;
+    let _y = &mut p.y;
+}
+
 fn assign_field1<'a>(x: Own<Point>) {
     x.y = 3; //~ ERROR cannot borrow
 }
@@ -89,6 +104,11 @@ fn assign_field3<'a>(x: &'a mut Own<Point>) {
     x.y = 3;
 }
 
+fn assign_field4<'a>(x: &'a mut Own<Point>) {
+    let _p: &mut Point = &mut **x;
+    x.y = 3; //~ ERROR cannot borrow
+}
+
 // FIXME(eddyb) #12825 This shouldn't attempt to call deref_mut.
 /*
 fn deref_imm_method(x: Own<Point>) {
@@ -128,4 +148,4 @@ fn assign_method3<'a>(x: &'a mut Own<Point>) {
     *x.y_mut() = 3;
 }
 
-pub fn main() {}
\ No newline at end of file
+pub fn main() {}