diff options
Diffstat (limited to 'src/test/ui/async-await/issue-68112.rs')
| -rw-r--r-- | src/test/ui/async-await/issue-68112.rs | 69 |
1 files changed, 0 insertions, 69 deletions
diff --git a/src/test/ui/async-await/issue-68112.rs b/src/test/ui/async-await/issue-68112.rs deleted file mode 100644 index 9c705137a10..00000000000 --- a/src/test/ui/async-await/issue-68112.rs +++ /dev/null @@ -1,69 +0,0 @@ -// edition:2018 -// revisions: no_drop_tracking drop_tracking -// [drop_tracking] compile-flags: -Zdrop-tracking=yes -// [no_drop_tracking] compile-flags: -Zdrop-tracking=no - -use std::{ - cell::RefCell, - future::Future, - pin::Pin, - sync::Arc, - task::{Context, Poll}, -}; - -fn require_send(_: impl Send) {} - -struct Ready<T>(Option<T>); -impl<T> Future for Ready<T> { - type Output = T; - fn poll(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<T> { - Poll::Ready(self.0.take().unwrap()) - } -} -fn ready<T>(t: T) -> Ready<T> { - Ready(Some(t)) -} - -fn make_non_send_future1() -> impl Future<Output = Arc<RefCell<i32>>> { - ready(Arc::new(RefCell::new(0))) -} - -fn test1() { - let send_fut = async { - let non_send_fut = make_non_send_future1(); - let _ = non_send_fut.await; - ready(0).await; - }; - require_send(send_fut); - //~^ ERROR future cannot be sent between threads -} - -fn test1_no_let() { - let send_fut = async { - let _ = make_non_send_future1().await; - ready(0).await; - }; - require_send(send_fut); - //~^ ERROR future cannot be sent between threads -} - -async fn ready2<T>(t: T) -> T { - t -} -fn make_non_send_future2() -> impl Future<Output = Arc<RefCell<i32>>> { - ready2(Arc::new(RefCell::new(0))) -} - -// Ideally this test would have diagnostics similar to the test above, but right -// now it doesn't. -fn test2() { - let send_fut = async { - let non_send_fut = make_non_send_future2(); - let _ = non_send_fut.await; - ready(0).await; - }; - require_send(send_fut); - //~^ ERROR `RefCell<i32>` cannot be shared between threads safely -} - -fn main() {} |
