From a7db0d5d30adbaec2b4ec6e009a0bf9c7850f9be Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 12 Mar 2014 13:31:00 -0400 Subject: [PATCH] compile-fail: Beef up borrowck test to include some scenarios where we borrow mutably twice in a row --- ...rrowck-borrow-overloaded-auto-deref-mut.rs | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) 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) -> &'a mut int { &mut x.y } +fn deref_extend_mut_field3<'a>(x: &'a mut Own) { + // 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) { + let p = &mut **x; + let _x = &mut p.x; + let _y = &mut p.y; +} + fn assign_field1<'a>(x: Own) { x.y = 3; //~ ERROR cannot borrow } @@ -89,6 +104,11 @@ fn assign_field3<'a>(x: &'a mut Own) { x.y = 3; } +fn assign_field4<'a>(x: &'a mut Own) { + 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) { @@ -128,4 +148,4 @@ fn assign_method3<'a>(x: &'a mut Own) { *x.y_mut() = 3; } -pub fn main() {} \ No newline at end of file +pub fn main() {}