   LL|       |#![feature(coverage_attribute)]
   LL|       |#![feature(custom_inner_attributes)] // for #![rustfmt::skip]
   LL|       |#![allow(unused_assignments, dead_code)]
   LL|       |#![rustfmt::skip]
   LL|       |//@ edition: 2018
   LL|       |//@ compile-flags: -Copt-level=1
   LL|       |
   LL|       |//@ aux-build: executor.rs
   LL|       |extern crate executor;
   LL|       |
   LL|      1|async fn c(x: u8) -> u8 {
   LL|      1|    if x == 8 {
   LL|      1|        1
   LL|       |    } else {
   LL|      0|        0
   LL|       |    }
   LL|      1|}
   LL|       |
   LL|      0|async fn d() -> u8 { 1 }
   LL|       |
   LL|      0|async fn e() -> u8 { 1 } // unused function; executor does not block on `g()`
   LL|       |
   LL|      1|async fn f() -> u8 { 1 }
   LL|       |
   LL|      0|async fn foo() -> [bool; 10] { [false; 10] } // unused function; executor does not block on `h()`
   LL|       |
   LL|      1|pub async fn g(x: u8) {
                                    ^0
   LL|      0|    match x {
   LL|      0|        y if e().await == y => (),
   LL|      0|        y if f().await == y => (),
   LL|      0|        _ => (),
   LL|       |    }
   LL|      0|}
   LL|       |
   LL|      1|async fn h(x: usize) { // The function signature is counted when called, but the body is not
                                   ^0
   LL|       |                       // executed (not awaited) so the open brace has a `0` count (at least when
   LL|       |                       // displayed with `llvm-cov show` in color-mode).
   LL|      0|    match x {
   LL|      0|        y if foo().await[y] => (),
   LL|      0|        _ => (),
   LL|       |    }
   LL|      0|}
   LL|       |
   LL|      1|async fn i(x: u8) { // line coverage is 1, but there are 2 regions:
   LL|       |                    // (a) the function signature, counted when the function is called; and
   LL|       |                    // (b) the open brace for the function body, counted once when the body is
   LL|       |                    // executed asynchronously.
   LL|      1|    match x {
   LL|      1|        y if c(x).await == y + 1 => { d().await; }
                      ^0                            ^0
   LL|      1|        y if f().await == y + 1 => (),
                      ^0                         ^0
   LL|      1|        _ => (),
   LL|       |    }
   LL|      1|}
   LL|       |
   LL|      1|fn j(x: u8) {
   LL|       |    // non-async versions of `c()`, `d()`, and `f()` to make it similar to async `i()`.
   LL|      1|    fn c(x: u8) -> u8 {
   LL|      1|        if x == 8 {
   LL|      0|            1
   LL|       |        } else {
   LL|      1|            0
   LL|       |        }
   LL|      1|    }
   LL|      0|    fn d() -> u8 { 1 } // inner function is defined in-line, but the function is not executed
   LL|      1|    fn f() -> u8 { 1 }
   LL|      1|    match x {
   LL|      1|        y if c(x) == y + 1 => { d(); }
                      ^0                    ^0
   LL|      1|        y if f() == y + 1 => (),
                      ^0                   ^0
   LL|      1|        _ => (),
   LL|       |    }
   LL|      1|}
   LL|       |
   LL|      0|fn k(x: u8) { // unused function
   LL|      0|    match x {
   LL|      0|        1 => (),
   LL|      0|        2 => (),
   LL|      0|        _ => (),
   LL|       |    }
   LL|      0|}
   LL|       |
   LL|      1|fn l(x: u8) {
   LL|      1|    match x {
   LL|      0|        1 => (),
   LL|      0|        2 => (),
   LL|      1|        _ => (),
   LL|       |    }
   LL|      1|}
   LL|       |
   LL|      1|async fn m(x: u8) -> u8 { x - 1 }
                                      ^0^0    ^0
   LL|       |
   LL|      1|fn main() {
   LL|      1|    let _ = g(10);
   LL|      1|    let _ = h(9);
   LL|      1|    let mut future = Box::pin(i(8));
   LL|      1|    j(7);
   LL|      1|    l(6);
   LL|      1|    let _ = m(5);
   LL|      1|    executor::block_on(future.as_mut());
   LL|      1|}

