//! 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.]+\]" -> "[RANGE]"

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);
}
