   LL|       |#![allow(unused_assignments)]
   LL|       |
   LL|     12|extern "C" fn might_abort(should_abort: bool) {
   LL|     12|    if should_abort {
   LL|      0|        println!("aborting...");
   LL|      0|        panic!("panics and aborts");
   LL|     12|    } else {
   LL|     12|        println!("Don't Panic");
   LL|     12|    }
   LL|     12|}
   LL|       |
   LL|       |#[rustfmt::skip]
   LL|      1|fn main() -> Result<(), u8> {
   LL|      1|    let mut countdown = 10;
   LL|     11|    while countdown > 0 {
   LL|     10|        if countdown < 5 {
   LL|      4|            might_abort(false);
   LL|      6|        }
   LL|       |        // See discussion (below the `Notes` section) on coverage results for the closing brace.
   LL|     10|        if countdown < 5 { might_abort(false); } // Counts for different regions on one line.
                                       ^4                     ^6
   LL|       |        // For the following example, the closing brace is the last character on the line.
   LL|       |        // This shows the character after the closing brace is highlighted, even if that next
   LL|       |        // character is a newline.
   LL|     10|        if countdown < 5 { might_abort(false); }
                                       ^4                     ^6
   LL|     10|        countdown -= 1;
   LL|       |    }
   LL|      1|    Ok(())
   LL|      1|}
   LL|       |
   LL|       |// Notes:
   LL|       |//   1. Compare this program and its coverage results to those of the similar tests
   LL|       |//      `panic_unwind.rs` and `try_error_result.rs`.
   LL|       |//   2. This test confirms the coverage generated when a program includes `UnwindAction::Terminate`.
   LL|       |//   3. The test does not invoke the abort. By executing to a successful completion, the coverage
   LL|       |//      results show where the program did and did not execute.
   LL|       |//   4. If the program actually aborted, the coverage counters would not be saved (which "works as
   LL|       |//      intended"). Coverage results would show no executed coverage regions.
   LL|       |//   6. If `should_abort` is `true` and the program aborts, the program exits with a `132` status
   LL|       |//      (on Linux at least).
   LL|       |
   LL|       |/*
   LL|       |
   LL|       |Expect the following coverage results:
   LL|       |
   LL|       |```text
   LL|       |    16|     11|    while countdown > 0 {
   LL|       |    17|     10|        if countdown < 5 {
   LL|       |    18|      4|            might_abort(false);
   LL|       |    19|      6|        }
   LL|       |```
   LL|       |
   LL|       |This is actually correct.
   LL|       |
   LL|       |The condition `countdown < 5` executed 10 times (10 loop iterations).
   LL|       |
   LL|       |It evaluated to `true` 4 times, and executed the `might_abort()` call.
   LL|       |
   LL|       |It skipped the body of the `might_abort()` call 6 times. If an `if` does not include an explicit
   LL|       |`else`, the coverage implementation injects a counter, at the character immediately after the `if`s
   LL|       |closing brace, to count the "implicit" `else`. This is the only way to capture the coverage of the
   LL|       |non-true condition.
   LL|       |
   LL|       |As another example of why this is important, say the condition was `countdown < 50`, which is always
   LL|       |`true`. In that case, we wouldn't have a test for what happens if `might_abort()` is not called.
   LL|       |The closing brace would have a count of `0`, highlighting the missed coverage.
   LL|       |*/

