| //@ run-rustfix |
| fn foo<T: Default>(list: &mut Vec<T>) { |
| 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<T: std::fmt::Display>(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)] |
| 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); |
| } |