| //! FIXME: This test should pass! However, `async fn` does not yet use `UnsafePinned`. | |
| //! This is a regression test for <https://github.com/rust-lang/rust/issues/137750>: | |
| //! `UnsafePinned` must include the effects of `UnsafeCell`. | |
| //@revisions: stack tree | |
| //@[tree]compile-flags: -Zmiri-tree-borrows | |
| //@normalize-stderr-test: "\[0x[a-fx\d.]+\]" -> "[OFFSET]" | |
| use core::future::Future; | |
| use core::pin::{Pin, pin}; | |
| use core::task::{Context, Poll, Waker}; | |
| fn main() { | |
| let mut f = pin!(async move { | |
| let x = &mut 0u8; | |
| core::future::poll_fn(move |_| { | |
| *x = 1; //~ERROR: write access | |
| Poll::<()>::Pending | |
| }) | |
| .await | |
| }); | |
| let mut cx = Context::from_waker(&Waker::noop()); | |
| assert_eq!(f.as_mut().poll(&mut cx), Poll::Pending); | |
| let _: Pin<&_> = f.as_ref(); // Or: `f.as_mut().into_ref()`. | |
| assert_eq!(f.as_mut().poll(&mut cx), Poll::Pending); | |
| } |