#![feature(box_syntax)] fn borrow(_v: &isize) {} fn local() { let mut v: Box<_> = box 3; borrow(&*v); } fn local_rec() { struct F { f: Box } let mut v = F {f: box 3}; borrow(&*v.f); } fn local_recs() { struct F { f: G } struct G { g: H } struct H { h: Box } let mut v = F {f: G {g: H {h: box 3}}}; borrow(&*v.f.g.h); } fn aliased_imm() { let mut v: Box<_> = box 3; let w = &v; borrow(&*v); w.use_ref(); } fn aliased_mut() { let mut v: Box<_> = box 3; let w = &mut v; borrow(&*v); //~ ERROR cannot borrow `*v` w.use_mut(); } fn aliased_other() { let mut v: Box<_> = box 3; let mut w: Box<_> = box 4; let x = &mut w; borrow(&*v); x.use_mut(); } fn aliased_other_reassign() { let mut v: Box<_> = box 3; let mut w: Box<_> = box 4; let mut x = &mut w; x = &mut v; borrow(&*v); //~ ERROR cannot borrow `*v` x.use_mut(); } fn main() { } trait Fake { fn use_mut(&mut self) { } fn use_ref(&self) { } } impl Fake for T { }