   LL|       |#![feature(core_intrinsics)]
   LL|       |#![feature(coverage_attribute)]
   LL|       |//@ edition: 2021
   LL|       |
   LL|       |// <https://github.com/rust-lang/rust/issues/116171>
   LL|       |// If we instrument a function for coverage, but all of its counter-increment
   LL|       |// statements are removed by MIR optimizations, LLVM will think it isn't
   LL|       |// instrumented and it will disappear from coverage maps and coverage reports.
   LL|       |// Most MIR opts won't cause this because they tend not to remove statements
   LL|       |// from bb0, but `UnreachablePropagation` can do so if it sees that bb0 ends
   LL|       |// with `TerminatorKind::Unreachable`.
   LL|       |
   LL|       |use std::hint::{black_box, unreachable_unchecked};
   LL|       |
   LL|      0|static UNREACHABLE_CLOSURE: fn() = || unsafe { unreachable_unchecked() };
   LL|       |
   LL|      0|fn unreachable_function() {
   LL|      0|    unsafe { unreachable_unchecked() }
   LL|       |}
   LL|       |
   LL|       |// Use an intrinsic to more reliably trigger unreachable-propagation.
   LL|      0|fn unreachable_intrinsic() {
   LL|      0|    unsafe { std::intrinsics::unreachable() }
   LL|       |}
   LL|       |
   LL|       |#[coverage(off)]
   LL|       |fn main() {
   LL|       |    if black_box(false) {
   LL|       |        UNREACHABLE_CLOSURE();
   LL|       |    }
   LL|       |    if black_box(false) {
   LL|       |        unreachable_function();
   LL|       |    }
   LL|       |    if black_box(false) {
   LL|       |        unreachable_intrinsic();
   LL|       |    }
   LL|       |}

