about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDelan Azabani <delan@azabani.com>2019-07-12 14:54:52 +1000
committerDelan Azabani <delan@azabani.com>2019-07-12 15:10:52 +1000
commit5f8d0a1920de9973f980423cd29dbed2eed0b92c (patch)
tree9278974b76f17032f9ccc0603c35f490af9c116a
parentd023e47877d28ffdaeb586c50d1271970f7c84f4 (diff)
downloadrust-5f8d0a1920de9973f980423cd29dbed2eed0b92c.tar.gz
rust-5f8d0a1920de9973f980423cd29dbed2eed0b92c.zip
test `unsafe fn` and `async unsafe fn` calls in `unsafe { async || }`
-rw-r--r--src/test/ui/async-await/async-await.rs4
-rw-r--r--src/test/ui/async-await/async-closure.rs16
-rw-r--r--src/test/ui/async-await/await-macro.rs7
3 files changed, 25 insertions, 2 deletions
diff --git a/src/test/ui/async-await/async-await.rs b/src/test/ui/async-await/async-await.rs
index dbcba812a40..5ec99c5d183 100644
--- a/src/test/ui/async-await/async-await.rs
+++ b/src/test/ui/async-await/async-await.rs
@@ -3,7 +3,7 @@
 // edition:2018
 // aux-build:arc_wake.rs
 
-#![feature(async_await, async_closure)]
+#![feature(async_await)]
 
 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 {
     wake_and_yield_once().await;
diff --git a/src/test/ui/async-await/async-closure.rs b/src/test/ui/async-await/async-closure.rs
index f5dc9e24d2d..925b54b3985 100644
--- a/src/test/ui/async-await/async-closure.rs
+++ b/src/test/ui/async-await/async-closure.rs
@@ -53,6 +53,21 @@ fn async_closure(x: u8) -> impl Future<Output = u8> {
     })(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,
@@ -77,5 +92,6 @@ fn main() {
 
     test! {
         async_closure,
+        async_closure_in_unsafe_block,
     }
 }
diff --git a/src/test/ui/async-await/await-macro.rs b/src/test/ui/async-await/await-macro.rs
index 9ac0ab7c6c7..b9cd3903513 100644
--- a/src/test/ui/async-await/await-macro.rs
+++ b/src/test/ui/async-await/await-macro.rs
@@ -77,6 +77,12 @@ fn async_closure(x: u8) -> impl Future<Output = u8> {
     })(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
@@ -193,6 +199,7 @@ fn main() {
         async_block,
         async_nonmove_block,
         async_closure,
+        async_closure_in_unsafe_block,
         async_fn,
         generic_async_fn,
         async_fn_with_internal_borrow,