mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-29 11:51:31 +03:00
ab786d3b98
When preparing a function's coverage counters and metadata during codegen, any part of the original coverage graph that was removed by MIR optimizations can be treated as having an execution count of zero. Somewhat counter-intuitively, if we give those unreachable nodes a _higher_ priority for receiving physical counters (instead of counter expressions), that ends up reducing the total number of physical counters needed. This works because if a node is unreachable, we don't actually create a physical counter for it. Instead that node gets a fixed zero counter, and any other node that would have relied on that physical counter in its counter expression can just ignore that term completely.
The tests in this directory are shared by two different test modes, and can be run in multiple different ways:
./x.py test coverage-map(compiles to LLVM IR and checks coverage mappings)./x.py test coverage-run(runs a test binary and checks its coverage report)./x.py test coverage(runs bothcoverage-mapandcoverage-run)
Maintenance note
These tests can be sensitive to small changes in MIR spans or MIR control flow, especially in HIR-to-MIR lowering or MIR optimizations.
If you haven't touched the coverage code directly, and the tests still pass in
coverage-run mode, then it should usually be OK to just re-bless the mappings
as necessary with ./x.py test coverage-map --bless, without worrying too much
about the exact changes.