// edition:2018
// aux-build:arc_wake.rs
-#![feature(async_await, async_closure)]
+#![feature(async_await)]
extern crate arc_wake;
}
}
-// see async-closure.rs for async_closure
+// see async-closure.rs for async_closure + async_closure_in_unsafe_block
async fn async_fn(x: u8) -> u8 {
wake_and_yield_once().await;
})(x)
}
+fn async_closure_in_unsafe_block(x: u8) -> impl Future<Output = u8> {
+ (unsafe {
+ async move |x: u8| unsafe_fn(unsafe_async_fn(x).await)
+ })(x)
+}
+
+async unsafe fn unsafe_async_fn(x: u8) -> u8 {
+ wake_and_yield_once().await;
+ x
+}
+
+unsafe fn unsafe_fn(x: u8) -> u8 {
+ x
+}
+
fn test_future_yields_once_then_returns<F, Fut>(f: F)
where
F: FnOnce(u8) -> Fut,
test! {
async_closure,
+ async_closure_in_unsafe_block,
}
}
})(x)
}
+fn async_closure_in_unsafe_block(x: u8) -> impl Future<Output = u8> {
+ (unsafe {
+ async move |x: u8| unsafe_fn(await!(unsafe_async_fn(x)))
+ })(x)
+}
+
async fn async_fn(x: u8) -> u8 {
await!(wake_and_yield_once());
x
async_block,
async_nonmove_block,
async_closure,
+ async_closure_in_unsafe_block,
async_fn,
generic_async_fn,
async_fn_with_internal_borrow,