| //@ run-rustfix | |
| fn foo<T: Default + Clone>(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 + Clone>(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); | |
| } |