diff options
Diffstat (limited to 'tests/ui/async-await/pin-needed-to-poll-2.rs')
-rw-r--r-- | tests/ui/async-await/pin-needed-to-poll-2.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/ui/async-await/pin-needed-to-poll-2.rs b/tests/ui/async-await/pin-needed-to-poll-2.rs new file mode 100644 index 000000000..6ce70336d --- /dev/null +++ b/tests/ui/async-await/pin-needed-to-poll-2.rs @@ -0,0 +1,48 @@ +use std::{ + future::Future, + pin::Pin, + marker::Unpin, + task::{Context, Poll}, +}; + +struct Sleep(std::marker::PhantomPinned); + +impl Future for Sleep { + type Output = (); + + fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { + Poll::Ready(()) + } +} + +impl Drop for Sleep { + fn drop(&mut self) {} +} + +fn sleep() -> Sleep { + Sleep(std::marker::PhantomPinned) +} + + +struct MyFuture { + sleep: Sleep, +} + +impl MyFuture { + fn new() -> Self { + Self { + sleep: sleep(), + } + } +} + +impl Future for MyFuture { + type Output = (); + + fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { + Pin::new(&mut self.sleep).poll(cx) + //~^ ERROR `PhantomPinned` cannot be unpinned + } +} + +fn main() {} |