aboutsummaryrefslogtreecommitdiff
path: root/tests/ui/pinned_drop/self.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/pinned_drop/self.rs')
-rw-r--r--tests/ui/pinned_drop/self.rs46
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() {}