//@ check-fail //@ run-rustfix #![deny(forgetting_references)] use std::mem::forget; struct SomeStruct; fn main() { let _ = &SomeStruct; //~ ERROR calls to `std::mem::forget` let mut owned = SomeStruct; let _ = &owned; //~ ERROR calls to `std::mem::forget` let _ = &&owned; //~ ERROR calls to `std::mem::forget` let _ = &mut owned; //~ ERROR calls to `std::mem::forget` forget(owned); let reference1 = &SomeStruct; let _ = &*reference1; //~ ERROR calls to `std::mem::forget` let reference2 = &mut SomeStruct; let _ = reference2; //~ ERROR calls to `std::mem::forget` let ref reference3 = SomeStruct; let _ = reference3; //~ ERROR calls to `std::mem::forget` } #[allow(dead_code)] fn test_generic_fn_forget(val: T) { let _ = &val; //~ ERROR calls to `std::mem::forget` forget(val); } #[allow(dead_code)] fn test_similarly_named_function() { fn forget(_val: T) {} forget(&SomeStruct); //OK; call to unrelated function which happens to have the same name let _ = &SomeStruct; //~ ERROR calls to `std::mem::forget` }