// Test that we detect nested calls that could free pointers evaluated // for earlier arguments. fn rewrite(v: &mut Box) -> usize { *v = Box::new(22); **v } fn add(v: &usize, w: Box) -> usize { *v + *w } fn implicit() { let mut a: Box<_> = Box::new(1); // Note the danger here: // // the pointer for the first argument has already been // evaluated, but it gets moved when evaluating the second // argument! add( &*a, a); //~ ERROR cannot move } fn explicit() { let mut a: Box<_> = Box::new(1); add( &*a, a); //~ ERROR cannot move } fn main() {}