Skip to content

Commit

Permalink
add test for #2068
Browse files Browse the repository at this point in the history
  • Loading branch information
RalfJung committed Apr 20, 2022
1 parent dd968a8 commit b5a76c7
Showing 1 changed file with 48 additions and 0 deletions.
48 changes: 48 additions & 0 deletions tests/run-pass/issue-miri-2068.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#![feature(pin_macro)]

use core::future::Future;
use core::pin::Pin;
use core::task::{Context, Poll};

use std::sync::Arc;

struct NopWaker;

impl std::task::Wake for NopWaker {
fn wake(self: Arc<Self>) {}
}

pub fn fuzzing_block_on<O, F: Future<Output = O>>(fut: F) -> O {
let mut fut = std::pin::pin!(fut);
let waker = std::task::Waker::from(Arc::new(NopWaker));
let mut context = std::task::Context::from_waker(&waker);
loop {
match fut.as_mut().poll(&mut context) {
Poll::Ready(v) => return v,
Poll::Pending => {}
}
}
}

pub struct LastFuture<S> {
last: S,
}

impl<S> Future for LastFuture<S>
where
Self: Unpin,
S: Unpin + Copy,
{
type Output = S;

fn poll(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Self::Output> {
return Poll::Ready(self.last);
}
}

fn main() {
fuzzing_block_on(async {
LastFuture { last: &0u32 }.await;
LastFuture { last: Option::<u32>::None }.await;
});
}

0 comments on commit b5a76c7

Please sign in to comment.