From 9875edc91ee9f2e5e15c6aa62ac51f002f3add71 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Mon, 11 Dec 2023 15:37:50 +0100 Subject: [PATCH] use Waker::noop instead of defining our own Waker --- tests/pass/async-fn.rs | 13 +++---------- tests/pass/dyn-star.rs | 18 ++---------------- tests/pass/future-self-referential.rs | 18 +++--------------- tests/pass/issues/issue-miri-2068.rs | 18 ++++++------------ tests/pass/move-data-across-await-point.rs | 13 +++---------- 5 files changed, 17 insertions(+), 63 deletions(-) diff --git a/tests/pass/async-fn.rs b/tests/pass/async-fn.rs index 1d5d9a27cc..69f35afe86 100644 --- a/tests/pass/async-fn.rs +++ b/tests/pass/async-fn.rs @@ -1,4 +1,5 @@ #![feature(never_type)] +#![feature(noop_waker)] use std::future::Future; @@ -58,17 +59,9 @@ async fn hello_world() { } fn run_fut(fut: impl Future) -> T { - use std::sync::Arc; - use std::task::{Context, Poll, Wake, Waker}; + use std::task::{Context, Poll, Waker}; - struct MyWaker; - impl Wake for MyWaker { - fn wake(self: Arc) { - unimplemented!() - } - } - - let waker = Waker::from(Arc::new(MyWaker)); + let waker = Waker::noop(); let mut context = Context::from_waker(&waker); let mut pinned = Box::pin(fut); diff --git a/tests/pass/dyn-star.rs b/tests/pass/dyn-star.rs index 1fac16352a..8e26c4850f 100644 --- a/tests/pass/dyn-star.rs +++ b/tests/pass/dyn-star.rs @@ -1,6 +1,7 @@ #![feature(dyn_star)] #![allow(incomplete_features)] #![feature(custom_inner_attributes)] +#![feature(noop_waker)] // rustfmt destroys `dyn* Trait` syntax #![rustfmt::skip] @@ -89,25 +90,10 @@ fn dispatch_on_pin_mut() { use std::pin::Pin; use std::task::*; - pub fn noop_waker() -> Waker { - let raw = RawWaker::new(std::ptr::null(), &NOOP_WAKER_VTABLE); - - // SAFETY: the contracts for RawWaker and RawWakerVTable are upheld - unsafe { Waker::from_raw(raw) } - } - - const NOOP_WAKER_VTABLE: RawWakerVTable = RawWakerVTable::new(noop_clone, noop, noop, noop); - - unsafe fn noop_clone(_p: *const ()) -> RawWaker { - RawWaker::new(std::ptr::null(), &NOOP_WAKER_VTABLE) - } - - unsafe fn noop(_p: *const ()) {} - let mut fut = async_main(); // Poll loop, just to test the future... - let waker = noop_waker(); + let waker = Waker::noop(); let ctx = &mut Context::from_waker(&waker); loop { diff --git a/tests/pass/future-self-referential.rs b/tests/pass/future-self-referential.rs index 763eceeb6f..38cb700fd5 100644 --- a/tests/pass/future-self-referential.rs +++ b/tests/pass/future-self-referential.rs @@ -1,5 +1,6 @@ //@revisions: stack tree //@[tree]compile-flags: -Zmiri-tree-borrows +#![feature(noop_waker)] use std::future::*; use std::marker::PhantomPinned; @@ -29,19 +30,6 @@ impl Future for Delay { } } -fn mk_waker() -> Waker { - use std::sync::Arc; - - struct MyWaker; - impl Wake for MyWaker { - fn wake(self: Arc) { - unimplemented!() - } - } - - Waker::from(Arc::new(MyWaker)) -} - async fn do_stuff() { (&mut Delay::new(1)).await; } @@ -89,7 +77,7 @@ impl Future for DoStuff { } fn run_fut(fut: impl Future) -> T { - let waker = mk_waker(); + let waker = Waker::noop(); let mut context = Context::from_waker(&waker); let mut pinned = pin!(fut); @@ -102,7 +90,7 @@ fn run_fut(fut: impl Future) -> T { } fn self_referential_box() { - let waker = mk_waker(); + let waker = Waker::noop(); let cx = &mut Context::from_waker(&waker); async fn my_fut() -> i32 { diff --git a/tests/pass/issues/issue-miri-2068.rs b/tests/pass/issues/issue-miri-2068.rs index fe4078f771..f18c4a3a06 100644 --- a/tests/pass/issues/issue-miri-2068.rs +++ b/tests/pass/issues/issue-miri-2068.rs @@ -1,19 +1,13 @@ -use core::future::Future; -use core::pin::Pin; -use core::task::{Context, Poll}; +#![feature(noop_waker)] -use std::sync::Arc; - -struct NopWaker; - -impl std::task::Wake for NopWaker { - fn wake(self: Arc) {} -} +use std::future::Future; +use std::pin::Pin; +use std::task::{Context, Poll, Waker}; pub fn fuzzing_block_on>(fut: F) -> O { let mut fut = std::pin::pin!(fut); - let waker = std::task::Waker::from(Arc::new(NopWaker)); - let mut context = std::task::Context::from_waker(&waker); + let waker = Waker::noop(); + let mut context = Context::from_waker(&waker); loop { match fut.as_mut().poll(&mut context) { Poll::Ready(v) => return v, diff --git a/tests/pass/move-data-across-await-point.rs b/tests/pass/move-data-across-await-point.rs index 5990d66fbd..9bea6ea574 100644 --- a/tests/pass/move-data-across-await-point.rs +++ b/tests/pass/move-data-across-await-point.rs @@ -1,3 +1,4 @@ +#![feature(noop_waker)] use std::future::Future; use std::ptr; @@ -53,17 +54,9 @@ fn data_moved() { } fn run_fut(fut: impl Future) -> T { - use std::sync::Arc; - use std::task::{Context, Poll, Wake, Waker}; + use std::task::{Context, Poll, Waker}; - struct MyWaker; - impl Wake for MyWaker { - fn wake(self: Arc) { - unimplemented!() - } - } - - let waker = Waker::from(Arc::new(MyWaker)); + let waker = Waker::noop(); let mut context = Context::from_waker(&waker); let mut pinned = Box::pin(fut);