1
Fork 0
rust/compiler/rustc_mir_transform
Zalathar 64df5a851e Skip MIR pass UnreachablePropagation when coverage is enabled
When coverage instrumentation and MIR opts are both enabled, coverage relies on
two assumptions:

- MIR opts that would delete `StatementKind::Coverage` statements instead move
  them into bb0 and change them to `CoverageKind::Unreachable`.

- MIR opts won't delete all `CoverageKind::Counter` statements from an
  instrumented function.

Most MIR opts naturally satisfy the second assumption, because they won't
remove coverage statements from bb0, but `UnreachablePropagation` can do so if
it finds that bb0 is unreachable. If this happens, LLVM thinks the function
isn't instrumented, and it vanishes from coverage reports.

A proper solution won't be possible until after per-function coverage info
lands in #116046, but for now we can avoid the problem by turning off this
particular pass when coverage instrumentation is enabled.
2023-09-26 20:18:43 +10:00
..
src Skip MIR pass UnreachablePropagation when coverage is enabled 2023-09-26 20:18:43 +10:00
Cargo.toml Make unconditional_recursion warning detect recursive drops 2023-07-22 14:04:45 +02:00
messages.ftl Don't report any errors in lower_intrinsics. They should have been typecked before. 2023-09-06 09:38:15 +00:00