test unsafe fn and async unsafe fn calls in unsafe { async || }

This commit is contained in:
Delan Azabani 2019-07-12 14:54:52 +10:00
parent d023e47877
commit 5f8d0a1920
3 changed files with 25 additions and 2 deletions

View File

@ -3,7 +3,7 @@
// edition:2018 // edition:2018
// aux-build:arc_wake.rs // aux-build:arc_wake.rs
#![feature(async_await, async_closure)] #![feature(async_await)]
extern crate arc_wake; extern crate arc_wake;
@ -70,7 +70,7 @@ fn async_nonmove_block(x: u8) -> impl Future<Output = u8> {
} }
} }
// 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 { async fn async_fn(x: u8) -> u8 {
wake_and_yield_once().await; wake_and_yield_once().await;

View File

@ -53,6 +53,21 @@ fn async_closure(x: u8) -> impl Future<Output = u8> {
})(x) })(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) fn test_future_yields_once_then_returns<F, Fut>(f: F)
where where
F: FnOnce(u8) -> Fut, F: FnOnce(u8) -> Fut,
@ -77,5 +92,6 @@ fn main() {
test! { test! {
async_closure, async_closure,
async_closure_in_unsafe_block,
} }
} }

View File

@ -77,6 +77,12 @@ fn async_closure(x: u8) -> impl Future<Output = u8> {
})(x) })(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 { async fn async_fn(x: u8) -> u8 {
await!(wake_and_yield_once()); await!(wake_and_yield_once());
x x
@ -193,6 +199,7 @@ fn main() {
async_block, async_block,
async_nonmove_block, async_nonmove_block,
async_closure, async_closure,
async_closure_in_unsafe_block,
async_fn, async_fn,
generic_async_fn, generic_async_fn,
async_fn_with_internal_borrow, async_fn_with_internal_borrow,