1 pub mod self_in_macro_def {
2     use std::pin::Pin;
3 
4     use pin_project::{pin_project, pinned_drop};
5 
6     #[pin_project(PinnedDrop)]
7     pub struct S {
8         f: (),
9     }
10 
11     #[pinned_drop]
12     impl PinnedDrop for S {
drop(self: Pin<&mut Self>)13         fn drop(self: Pin<&mut Self>) {
14             macro_rules! t {
15                 () => {{
16                     let _ = self; //~ ERROR E0434
17 
18                     fn f(self: ()) {} //~ ERROR `self` parameter is only allowed in associated functions
19                 }};
20             }
21             t!();
22         }
23     }
24 }
25 
26 pub mod self_span {
27     use std::pin::Pin;
28 
29     use pin_project::{pin_project, pinned_drop};
30 
31     #[pin_project(PinnedDrop)]
32     pub struct S {
33         f: (),
34     }
35 
36     #[pinned_drop]
37     impl PinnedDrop for S {
drop(self: Pin<&mut Self>)38         fn drop(self: Pin<&mut Self>) {
39             let _: () = self; //~ ERROR E0308
40             let _: Self = Self; //~ ERROR E0423
41         }
42     }
43 
44     #[pin_project(PinnedDrop)]
45     pub enum E {
46         V { f: () },
47     }
48 
49     #[pinned_drop]
50     impl PinnedDrop for E {
drop(self: Pin<&mut Self>)51         fn drop(self: Pin<&mut Self>) {
52             let _: () = self; //~ ERROR E0308
53             let _: Self = Self::V; //~ ERROR E0533
54         }
55     }
56 }
57 
main()58 fn main() {}
59