// check-pass #![warn(forget_copy)] use std::mem::forget; use std::vec::Vec; #[derive(Copy, Clone)] struct SomeStruct; struct AnotherStruct { x: u8, y: u8, z: Vec, } impl Clone for AnotherStruct { fn clone(&self) -> AnotherStruct { AnotherStruct { x: self.x, y: self.y, z: self.z.clone(), } } } fn main() { let s1 = SomeStruct {}; let s2 = s1; let s3 = &s1; let mut s4 = s1; let ref s5 = s1; forget(s1); //~ WARN calls to `std::mem::forget` forget(s2); //~ WARN calls to `std::mem::forget` forget(s3); //~ WARN calls to `std::mem::forget` forget(s4); //~ WARN calls to `std::mem::forget` forget(s5); //~ WARN calls to `std::mem::forget` let a1 = AnotherStruct { x: 255, y: 0, z: vec![1, 2, 3], }; let a2 = &a1; let mut a3 = a1.clone(); let ref a4 = a1; let a5 = a1.clone(); forget(a2); //~ WARN calls to `std::mem::forget` let a3 = &a1; forget(a3); //~ WARN calls to `std::mem::forget` forget(a4); //~ WARN calls to `std::mem::forget` let a5 = a1.clone(); forget(a5); }