1
Fork 0

coverage: Migrate tests/run-coverage into tests/coverage

This commit is contained in:
Zalathar 2023-11-01 21:26:53 +11:00
parent aea7c27eae
commit e9d04c5e24
105 changed files with 7 additions and 9 deletions

View file

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