rust/tests/coverage/unreachable.coverage
Zalathar c9c049b2b4 coverage: Use normal edition: headers in coverage tests
Some of these tests were originally written as part of a custom `run-make`
test, so at that time they weren't able to use the normal compiletest header
directive parser.

Now that they're properly integrated, there's no need for them to use
`compile-flags` to specify the edition, since they can use `edition` instead.
2024-02-02 11:17:05 +11:00

39 lines
1.6 KiB
Plaintext

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| |}