async.j - Coverage Spans

@0,3,4,5⦊fn j(x: u8) { // non-async versions of `c()`, `d()`, and `f()` to make it similar to async `i()`. fn c(x: u8) -> u8 { if x == 8 { 1 // This line appears covered, but the 1-character expression span covering the `1` // is not executed. (`llvm-cov show` displays a `^0` below the `1` ). This is because // `fn j()` executes the open brace for the funciton body, followed by the function's // first executable statement, `match x`. Inner function declarations are not // "visible" to the MIR for `j()`, so the code region counts all lines between the // open brace and the first statement as executed, which is, in a sense, true. // `llvm-cov show` overcomes this kind of situation by showing the actual counts // of the enclosed coverages, (that is, the `1` expression was not executed, and // accurately displays a `0`). } else { 0 } } fn d() -> u8 { 1 } fn f() -> u8 { 1 } match x⦉@0,3,4,5 { @6,8⦊y⦉@6,8 if @0,3,4,5⦊c(x) == y + 1⦉@0,3,4,5 => @6,8⦊{ d(); }⦉@6,8 @12⦊y⦉@12 if @1,9,10,11⦊f() == y + 1⦉@1,9,10,11 => @12⦊()⦉@12, _ => @2⦊()⦉@2, } }@14⦊‸⦉@14