| #![warn(clippy::undropped_manually_drops)] |
| |
| struct S; |
| |
| fn main() { |
| let f = std::mem::drop; |
| let g = std::mem::ManuallyDrop::drop; |
| let mut manual1 = std::mem::ManuallyDrop::new(S); |
| let mut manual2 = std::mem::ManuallyDrop::new(S); |
| let mut manual3 = std::mem::ManuallyDrop::new(S); |
| let mut manual4 = std::mem::ManuallyDrop::new(S); |
| |
| // These lines will not drop `S` and should be linted |
| drop(std::mem::ManuallyDrop::new(S)); |
| drop(manual1); |
| |
| // FIXME: this line is not linted, though it should be |
| f(manual2); |
| |
| // These lines will drop `S` and should be okay. |
| unsafe { |
| std::mem::ManuallyDrop::drop(&mut std::mem::ManuallyDrop::new(S)); |
| std::mem::ManuallyDrop::drop(&mut manual3); |
| g(&mut manual4); |
| } |
| } |