diff options
Diffstat (limited to 'tests/ui/pinned_drop/self.rs')
-rw-r--r-- | tests/ui/pinned_drop/self.rs | 46 |
1 files changed, 37 insertions, 9 deletions
diff --git a/tests/ui/pinned_drop/self.rs b/tests/ui/pinned_drop/self.rs index cd53b04..9176066 100644 --- a/tests/ui/pinned_drop/self.rs +++ b/tests/ui/pinned_drop/self.rs @@ -1,10 +1,10 @@ -use pin_project::{pin_project, pinned_drop}; -use std::pin::Pin; +pub mod self_in_macro_def { + use pin_project::{pin_project, pinned_drop}; + use std::pin::Pin; -fn self_in_macro_def() { #[pin_project(PinnedDrop)] pub struct Struct { - x: usize, + x: (), } #[pinned_drop] @@ -12,12 +12,9 @@ fn self_in_macro_def() { fn drop(self: Pin<&mut Self>) { macro_rules! t { () => {{ - let _ = self; //~ ERROR can't capture dynamic environment in a fn item + let _ = self; //~ ERROR E0434 - fn f(self: ()) { - //~^ ERROR `self` parameter is only allowed in associated functions - let _ = self; - } + fn f(self: ()) {} //~ ERROR `self` parameter is only allowed in associated functions }}; } t!(); @@ -25,4 +22,35 @@ fn self_in_macro_def() { } } +pub mod self_span { + use pin_project::{pin_project, pinned_drop}; + use std::pin::Pin; + + #[pin_project(PinnedDrop)] + pub struct S { + x: (), + } + + #[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 { x: () }, + } + + #[pinned_drop] + impl PinnedDrop for E { + fn drop(self: Pin<&mut Self>) { + let _: () = self; //~ ERROR E0308 + let _: Self = Self::V; //~ ERROR E0533 + } + } +} + fn main() {} |