Skip to content

Commit fdde088

Browse files
committed
Auto merge of #3222 - RalfJung:waker-noop, r=RalfJung
tests: use Waker::noop instead of defining our own Waker
2 parents 02d5495 + 9875edc commit fdde088

File tree

5 files changed

+17
-63
lines changed

5 files changed

+17
-63
lines changed

tests/pass/async-fn.rs

+3-10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![feature(never_type)]
2+
#![feature(noop_waker)]
23

34
use std::future::Future;
45

@@ -58,17 +59,9 @@ async fn hello_world() {
5859
}
5960

6061
fn run_fut<T>(fut: impl Future<Output = T>) -> T {
61-
use std::sync::Arc;
62-
use std::task::{Context, Poll, Wake, Waker};
62+
use std::task::{Context, Poll, Waker};
6363

64-
struct MyWaker;
65-
impl Wake for MyWaker {
66-
fn wake(self: Arc<Self>) {
67-
unimplemented!()
68-
}
69-
}
70-
71-
let waker = Waker::from(Arc::new(MyWaker));
64+
let waker = Waker::noop();
7265
let mut context = Context::from_waker(&waker);
7366

7467
let mut pinned = Box::pin(fut);

tests/pass/dyn-star.rs

+2-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#![feature(dyn_star)]
22
#![allow(incomplete_features)]
33
#![feature(custom_inner_attributes)]
4+
#![feature(noop_waker)]
45
// rustfmt destroys `dyn* Trait` syntax
56
#![rustfmt::skip]
67

@@ -89,25 +90,10 @@ fn dispatch_on_pin_mut() {
8990
use std::pin::Pin;
9091
use std::task::*;
9192

92-
pub fn noop_waker() -> Waker {
93-
let raw = RawWaker::new(std::ptr::null(), &NOOP_WAKER_VTABLE);
94-
95-
// SAFETY: the contracts for RawWaker and RawWakerVTable are upheld
96-
unsafe { Waker::from_raw(raw) }
97-
}
98-
99-
const NOOP_WAKER_VTABLE: RawWakerVTable = RawWakerVTable::new(noop_clone, noop, noop, noop);
100-
101-
unsafe fn noop_clone(_p: *const ()) -> RawWaker {
102-
RawWaker::new(std::ptr::null(), &NOOP_WAKER_VTABLE)
103-
}
104-
105-
unsafe fn noop(_p: *const ()) {}
106-
10793
let mut fut = async_main();
10894

10995
// Poll loop, just to test the future...
110-
let waker = noop_waker();
96+
let waker = Waker::noop();
11197
let ctx = &mut Context::from_waker(&waker);
11298

11399
loop {

tests/pass/future-self-referential.rs

+3-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//@revisions: stack tree
22
//@[tree]compile-flags: -Zmiri-tree-borrows
3+
#![feature(noop_waker)]
34

45
use std::future::*;
56
use std::marker::PhantomPinned;
@@ -29,19 +30,6 @@ impl Future for Delay {
2930
}
3031
}
3132

32-
fn mk_waker() -> Waker {
33-
use std::sync::Arc;
34-
35-
struct MyWaker;
36-
impl Wake for MyWaker {
37-
fn wake(self: Arc<Self>) {
38-
unimplemented!()
39-
}
40-
}
41-
42-
Waker::from(Arc::new(MyWaker))
43-
}
44-
4533
async fn do_stuff() {
4634
(&mut Delay::new(1)).await;
4735
}
@@ -89,7 +77,7 @@ impl Future for DoStuff {
8977
}
9078

9179
fn run_fut<T>(fut: impl Future<Output = T>) -> T {
92-
let waker = mk_waker();
80+
let waker = Waker::noop();
9381
let mut context = Context::from_waker(&waker);
9482

9583
let mut pinned = pin!(fut);
@@ -102,7 +90,7 @@ fn run_fut<T>(fut: impl Future<Output = T>) -> T {
10290
}
10391

10492
fn self_referential_box() {
105-
let waker = mk_waker();
93+
let waker = Waker::noop();
10694
let cx = &mut Context::from_waker(&waker);
10795

10896
async fn my_fut() -> i32 {

tests/pass/issues/issue-miri-2068.rs

+6-12
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
1-
use core::future::Future;
2-
use core::pin::Pin;
3-
use core::task::{Context, Poll};
1+
#![feature(noop_waker)]
42

5-
use std::sync::Arc;
6-
7-
struct NopWaker;
8-
9-
impl std::task::Wake for NopWaker {
10-
fn wake(self: Arc<Self>) {}
11-
}
3+
use std::future::Future;
4+
use std::pin::Pin;
5+
use std::task::{Context, Poll, Waker};
126

137
pub fn fuzzing_block_on<O, F: Future<Output = O>>(fut: F) -> O {
148
let mut fut = std::pin::pin!(fut);
15-
let waker = std::task::Waker::from(Arc::new(NopWaker));
16-
let mut context = std::task::Context::from_waker(&waker);
9+
let waker = Waker::noop();
10+
let mut context = Context::from_waker(&waker);
1711
loop {
1812
match fut.as_mut().poll(&mut context) {
1913
Poll::Ready(v) => return v,

tests/pass/move-data-across-await-point.rs

+3-10
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![feature(noop_waker)]
12
use std::future::Future;
23
use std::ptr;
34

@@ -53,17 +54,9 @@ fn data_moved() {
5354
}
5455

5556
fn run_fut<T>(fut: impl Future<Output = T>) -> T {
56-
use std::sync::Arc;
57-
use std::task::{Context, Poll, Wake, Waker};
57+
use std::task::{Context, Poll, Waker};
5858

59-
struct MyWaker;
60-
impl Wake for MyWaker {
61-
fn wake(self: Arc<Self>) {
62-
unimplemented!()
63-
}
64-
}
65-
66-
let waker = Waker::from(Arc::new(MyWaker));
59+
let waker = Waker::noop();
6760
let mut context = Context::from_waker(&waker);
6861

6962
let mut pinned = Box::pin(fut);

0 commit comments

Comments
 (0)