diff --git a/src/lib.rs b/src/lib.rs index ca13164..b3372ef 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,8 +21,8 @@ static VTABLE: RawWakerVTable = RawWakerVTable::new( ); /// Run a `Future`. -pub fn run(mut f: F) -> F::Output { - let mut f = unsafe { std::pin::Pin::new_unchecked(&mut f) }; +pub unsafe fn run(mut f: F) -> F::Output { + let mut f = std::pin::Pin::new_unchecked(&mut f); let park = Arc::new(Park::default()); let sender = Arc::into_raw(park.clone()); let raw_waker = RawWaker::new(sender as *const _, &VTABLE); diff --git a/tests/smoke.rs b/tests/smoke.rs index 353f438..5d90183 100644 --- a/tests/smoke.rs +++ b/tests/smoke.rs @@ -11,18 +11,20 @@ use std::{ #[test] fn smoke() { let s = S(Arc::new(AtomicBool::new(false))); - extreme::run(async {}); - extreme::run(async { - async { - s.await - }.await - }); - extreme::run(async { - async { + unsafe { + extreme::run(async {}); + extreme::run(async { async { + s.await }.await - }.await - }); + }); + extreme::run(async { + async { + async { + }.await + }.await + }); + } } struct S(Arc);