mirror of
https://github.com/rust-lang/rust.git
synced 2026-02-17 01:54:43 +00:00
When a lazy logical operator (`&&` or `||`) occurs outside of an `if` condition, it normally doesn't have any associated control-flow branch, so we don't have an existing way to track whether it was true or false. This patch adds special code to handle this case, by inserting extra MIR blocks in a diamond shape after evaluating the RHS. This gives us a place to insert the appropriate marker statements, which can then be given their own counters.
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.