summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/tests/ui/undropped_manually_drops.rs
blob: f4cfc92e1cd0259eddc426dce698b54ee4c7b61d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#![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);
    }
}