//@ run-rustfix fn foo(list: &mut Vec) { let mut cloned_items = Vec::new(); for v in list.iter() { cloned_items.push(v.clone()) } list.push(T::default()); //~^ ERROR cannot borrow `*list` as mutable because it is also borrowed as immutable drop(cloned_items); } fn bar(x: T) { let a = &x; let b = a.clone(); drop(x); //~^ ERROR cannot move out of `x` because it is borrowed println!("{b}"); } #[derive(Debug)] #[derive(Clone)] struct A; fn qux(x: A) { let a = &x; let b = a.clone(); drop(x); //~^ ERROR cannot move out of `x` because it is borrowed println!("{b:?}"); } fn main() { foo(&mut vec![1, 2, 3]); bar(""); qux(A); }