diff options
| author | Jakub Kozlowski <mail@jakub-kozlowski.com> | 2018-09-06 19:01:49 +0100 |
|---|---|---|
| committer | Jakub Kozlowski <mail@jakub-kozlowski.com> | 2018-09-06 19:02:51 +0100 |
| commit | 4088a385a70e2aa8d98a5c235a3bc13397fa82df (patch) | |
| tree | d900d94f1ef8f3f8d33f1fe27da307bb91ab790b /src/test | |
| parent | 35a5541fd90c96564d483eee248daabc6b133de3 (diff) | |
Allow named lifetimes in async functions.
- Fixes #53174
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/run-pass/async-await.rs | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/src/test/run-pass/async-await.rs b/src/test/run-pass/async-await.rs index 46f22845907..9d004ea4574 100644 --- a/src/test/run-pass/async-await.rs +++ b/src/test/run-pass/async-await.rs @@ -67,6 +67,13 @@ fn async_block(x: u8) -> impl Future<Output = u8> { } } +fn async_block_with_borrow_named_lifetime<'a>(x: &'a u8) -> impl Future<Output = u8> + 'a { + async move { + await!(wake_and_yield_once()); + *x + } +} + fn async_nonmove_block(x: u8) -> impl Future<Output = u8> { async move { let future = async { @@ -94,6 +101,23 @@ async fn async_fn_with_borrow(x: &u8) -> u8 { *x } +async fn async_fn_with_borrow_named_lifetime<'a>(x: &'a u8) -> u8 { + await!(wake_and_yield_once()); + *x +} + +fn async_fn_with_impl_future_named_lifetime<'a>(x: &'a u8) -> impl Future<Output = u8> + 'a { + async move { + await!(wake_and_yield_once()); + *x + } +} + +async fn async_fn_with_named_lifetime_multiple_args<'a>(x: &'a u8, _y: &'a u8) -> u8 { + await!(wake_and_yield_once()); + *x +} + fn async_fn_with_internal_borrow(y: u8) -> impl Future<Output = u8> { async move { await!(async_fn_with_borrow(&y)) @@ -138,16 +162,43 @@ where fn main() { macro_rules! test { - ($($fn_name:ident,)*) => { $( + ($($fn_name:expr,)*) => { $( test_future_yields_once_then_returns($fn_name); )* } } + macro_rules! test_with_borrow { + ($($fn_name:expr,)*) => { $( + test_future_yields_once_then_returns(|x| { + async move { + await!($fn_name(&x)) + } + }); + )* } + } + test! { async_block, async_nonmove_block, async_closure, async_fn, async_fn_with_internal_borrow, + |x| { + async move { + unsafe { await!(unsafe_async_fn(x)) } + } + }, + } + + test_with_borrow! { + async_block_with_borrow_named_lifetime, + async_fn_with_borrow, + async_fn_with_borrow_named_lifetime, + async_fn_with_impl_future_named_lifetime, + |x| { + async move { + await!(async_fn_with_named_lifetime_multiple_args(x, x)) + } + }, } } |
