   LL|       |// compile-flags: --edition=2018
   LL|       |
   LL|       |use core::{
   LL|       |    future::Future,
   LL|       |    marker::Send,
   LL|       |    pin::Pin,
   LL|       |};
   LL|       |
   LL|      1|fn non_async_func() {
   LL|      1|    println!("non_async_func was covered");
   LL|      1|    let b = true;
   LL|      1|    if b {
   LL|      1|        println!("non_async_func println in block");
   LL|      1|    }
                   ^0
   LL|      1|}
   LL|       |
   LL|       |
   LL|       |
   LL|       |
   LL|      1|async fn async_func() {
   LL|      1|    println!("async_func was covered");
   LL|      1|    let b = true;
   LL|      1|    if b {
   LL|      1|        println!("async_func println in block");
   LL|      1|    }
                   ^0
   LL|      1|}
   LL|       |
   LL|       |
   LL|       |
   LL|       |
   LL|      1|async fn async_func_just_println() {
   LL|      1|    println!("async_func_just_println was covered");
   LL|      1|}
   LL|       |
   LL|      1|fn main() {
   LL|      1|    println!("codecovsample::main");
   LL|      1|
   LL|      1|    non_async_func();
   LL|      1|
   LL|      1|    executor::block_on(async_func());
   LL|      1|    executor::block_on(async_func_just_println());
   LL|      1|}
   LL|       |
   LL|       |mod executor {
   LL|       |    use core::{
   LL|       |        future::Future,
   LL|       |        pin::Pin,
   LL|       |        task::{Context, Poll, RawWaker, RawWakerVTable, Waker},
   LL|       |    };
   LL|       |
   LL|      2|    pub fn block_on<F: Future>(mut future: F) -> F::Output {
   LL|      2|        let mut future = unsafe { Pin::new_unchecked(&mut future) };
   LL|      2|        use std::hint::unreachable_unchecked;
   LL|      2|        static VTABLE: RawWakerVTable = RawWakerVTable::new(
   LL|      2|            |_| unsafe { unreachable_unchecked() }, // clone
                              ^0
   LL|      2|            |_| unsafe { unreachable_unchecked() }, // wake
                              ^0
   LL|      2|            |_| unsafe { unreachable_unchecked() }, // wake_by_ref
                              ^0
   LL|      2|            |_| (),
   LL|      2|        );
   LL|      2|        let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) };
   LL|      2|        let mut context = Context::from_waker(&waker);
   LL|       |
   LL|       |        loop {
   LL|      2|            if let Poll::Ready(val) = future.as_mut().poll(&mut context) {
   LL|      2|                break val;
   LL|      0|            }
   LL|       |        }
   LL|      2|    }
  ------------------
  | async2::executor::block_on::<async2::async_func::{closure#0}>:
  |   LL|      1|    pub fn block_on<F: Future>(mut future: F) -> F::Output {
  |   LL|      1|        let mut future = unsafe { Pin::new_unchecked(&mut future) };
  |   LL|      1|        use std::hint::unreachable_unchecked;
  |   LL|      1|        static VTABLE: RawWakerVTable = RawWakerVTable::new(
  |   LL|      1|            |_| unsafe { unreachable_unchecked() }, // clone
  |   LL|      1|            |_| unsafe { unreachable_unchecked() }, // wake
  |   LL|      1|            |_| unsafe { unreachable_unchecked() }, // wake_by_ref
  |   LL|      1|            |_| (),
  |   LL|      1|        );
  |   LL|      1|        let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) };
  |   LL|      1|        let mut context = Context::from_waker(&waker);
  |   LL|       |
  |   LL|       |        loop {
  |   LL|      1|            if let Poll::Ready(val) = future.as_mut().poll(&mut context) {
  |   LL|      1|                break val;
  |   LL|      0|            }
  |   LL|       |        }
  |   LL|      1|    }
  ------------------
  | async2::executor::block_on::<async2::async_func_just_println::{closure#0}>:
  |   LL|      1|    pub fn block_on<F: Future>(mut future: F) -> F::Output {
  |   LL|      1|        let mut future = unsafe { Pin::new_unchecked(&mut future) };
  |   LL|      1|        use std::hint::unreachable_unchecked;
  |   LL|      1|        static VTABLE: RawWakerVTable = RawWakerVTable::new(
  |   LL|      1|            |_| unsafe { unreachable_unchecked() }, // clone
  |   LL|      1|            |_| unsafe { unreachable_unchecked() }, // wake
  |   LL|      1|            |_| unsafe { unreachable_unchecked() }, // wake_by_ref
  |   LL|      1|            |_| (),
  |   LL|      1|        );
  |   LL|      1|        let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) };
  |   LL|      1|        let mut context = Context::from_waker(&waker);
  |   LL|       |
  |   LL|       |        loop {
  |   LL|      1|            if let Poll::Ready(val) = future.as_mut().poll(&mut context) {
  |   LL|      1|                break val;
  |   LL|      0|            }
  |   LL|       |        }
  |   LL|      1|    }
  ------------------
   LL|       |}

