aboutsummaryrefslogtreecommitdiff
path: root/tests/ui/pinned_drop/self.rs
blob: ff634022e572b0d08411fe93878a35c1df6065dd (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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
pub mod self_in_macro_def {
    use std::pin::Pin;

    use pin_project::{pin_project, pinned_drop};

    #[pin_project(PinnedDrop)]
    pub struct S {
        f: (),
    }

    #[pinned_drop]
    impl PinnedDrop for S {
        fn drop(self: Pin<&mut Self>) {
            macro_rules! t {
                () => {{
                    let _ = self; //~ ERROR E0434

                    fn f(self: ()) {} //~ ERROR `self` parameter is only allowed in associated functions
                }};
            }
            t!();
        }
    }
}

pub mod self_span {
    use std::pin::Pin;

    use pin_project::{pin_project, pinned_drop};

    #[pin_project(PinnedDrop)]
    pub struct S {
        f: (),
    }

    #[pinned_drop]
    impl PinnedDrop for S {
        fn drop(self: Pin<&mut Self>) {
            let _: () = self; //~ ERROR E0308
            let _: Self = Self; //~ ERROR E0423
        }
    }

    #[pin_project(PinnedDrop)]
    pub enum E {
        V { f: () },
    }

    #[pinned_drop]
    impl PinnedDrop for E {
        fn drop(self: Pin<&mut Self>) {
            let _: () = self; //~ ERROR E0308
            let _: Self = Self::V; //~ ERROR E0533
        }
    }
}

fn main() {}