#![warn(drop_ref, forget_ref)] #![allow(toplevel_ref_arg, similar_names, needless_pass_by_value)] use std::mem::{drop, forget}; struct SomeStruct; fn main() { drop(&SomeStruct); forget(&SomeStruct); let mut owned1 = SomeStruct; drop(&owned1); drop(&&owned1); drop(&mut owned1); drop(owned1); //OK let mut owned2 = SomeStruct; forget(&owned2); forget(&&owned2); forget(&mut owned2); forget(owned2); //OK let reference1 = &SomeStruct; drop(reference1); forget(&*reference1); let reference2 = &mut SomeStruct; drop(reference2); let reference3 = &mut SomeStruct; forget(reference3); let ref reference4 = SomeStruct; drop(reference4); forget(reference4); } #[allow(dead_code)] fn test_generic_fn_drop(val: T) { drop(&val); drop(val); //OK } #[allow(dead_code)] fn test_generic_fn_forget(val: T) { forget(&val); forget(val); //OK } #[allow(dead_code)] fn test_similarly_named_function() { fn drop(_val: T) {} drop(&SomeStruct); //OK; call to unrelated function which happens to have the same name std::mem::drop(&SomeStruct); fn forget(_val: T) {} forget(&SomeStruct); //OK; call to unrelated function which happens to have the same name std::mem::forget(&SomeStruct); }