]> git.proxmox.com Git - rustc.git/blob - tests/coverage-map/status-quo/async2.rs
New upstream version 1.74.1+dfsg1
[rustc.git] / tests / coverage-map / status-quo / async2.rs
1 // compile-flags: --edition=2018
2
3 fn non_async_func() {
4 println!("non_async_func was covered");
5 let b = true;
6 if b {
7 println!("non_async_func println in block");
8 }
9 }
10
11 async fn async_func() {
12 println!("async_func was covered");
13 let b = true;
14 if b {
15 println!("async_func println in block");
16 }
17 }
18
19 async fn async_func_just_println() {
20 println!("async_func_just_println was covered");
21 }
22
23 fn main() {
24 println!("codecovsample::main");
25
26 non_async_func();
27
28 executor::block_on(async_func());
29 executor::block_on(async_func_just_println());
30 }
31
32 mod executor {
33 use core::{
34 future::Future,
35 pin::Pin,
36 task::{Context, Poll, RawWaker, RawWakerVTable, Waker},
37 };
38
39 pub fn block_on<F: Future>(mut future: F) -> F::Output {
40 let mut future = unsafe { Pin::new_unchecked(&mut future) };
41 use std::hint::unreachable_unchecked;
42 static VTABLE: RawWakerVTable = RawWakerVTable::new(
43 |_| unsafe { unreachable_unchecked() }, // clone
44 |_| unsafe { unreachable_unchecked() }, // wake
45 |_| unsafe { unreachable_unchecked() }, // wake_by_ref
46 |_| (),
47 );
48 let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) };
49 let mut context = Context::from_waker(&waker);
50
51 loop {
52 if let Poll::Ready(val) = future.as_mut().poll(&mut context) {
53 break val;
54 }
55 }
56 }
57 }