fn borrow_mut(x: &mut T) -> &mut T { x } fn borrow(x: &T) -> &T { x } fn borrow_mut2(_: &mut T, _: &mut T) {} fn borrow2(_: &mut T, _: &T) {} fn double_mut_borrow(x: &mut Box) { let y = borrow_mut(x); let z = borrow_mut(x); //~^ ERROR cannot borrow `*x` as mutable more than once at a time drop((y, z)); } fn double_imm_borrow(x: &mut Box) { let y = borrow(x); let z = borrow(x); **x += 1; //~^ ERROR cannot assign to `**x` because it is borrowed drop((y, z)); } fn double_mut_borrow2(x: &mut Box) { borrow_mut2(x, x); //~^ ERROR cannot borrow `*x` as mutable more than once at a time } fn double_borrow2(x: &mut Box) { borrow2(x, x); //~^ ERROR cannot borrow `*x` as mutable because it is also borrowed as immutable } pub fn main() {}