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()58fn main() {} 59