rust/tests/coverage
Zalathar 35a8746832 coverage: Instrument the RHS value of lazy logical operators
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.
2024-05-30 15:38:46 +10:00
..
auxiliary Tweak various coverage test files for slightly nicer formatting 2024-05-29 14:34:11 +10:00
branch coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
condition coverage: Instrument the RHS value of lazy logical operators 2024-05-30 15:38:46 +10:00
mcdc coverage: Add tests for the MC/DC condition limit 2024-05-29 20:12:20 +10:00
abort.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
abort.coverage
abort.rs
assert_not.cov-map
assert_not.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
assert_not.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
assert.cov-map
assert.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
assert.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
async2.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
async2.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
async2.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
async_block.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
async_block.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
async_block.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
async.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
async.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
async.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
bad_counter_ids.cov-map
bad_counter_ids.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
bad_counter_ids.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
bench.cov-map
bench.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
bench.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
closure_bug.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
closure_bug.coverage
closure_bug.rs
closure_macro_async.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
closure_macro_async.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
closure_macro_async.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
closure_macro.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
closure_macro.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
closure_macro.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
closure_unit_return.cov-map coverage: Discard spans that fill the entire function body 2024-02-16 10:57:03 +11:00
closure_unit_return.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
closure_unit_return.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
closure.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
closure.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
closure.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
color.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
color.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
conditions.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
conditions.coverage
conditions.rs
continue.cov-map
continue.coverage
continue.rs
coroutine.cov-map Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00
coroutine.coverage Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00
coroutine.rs Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00
coverage_attr_closure.cov-map coverage: Discard spans that fill the entire function body 2024-02-16 10:57:03 +11:00
coverage_attr_closure.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
coverage_attr_closure.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
dead_code.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
dead_code.coverage
dead_code.rs
drop_trait.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
drop_trait.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
drop_trait.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
fn_sig_into_try.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
fn_sig_into_try.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
fn_sig_into_try.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
generics.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
generics.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
generics.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
if_else.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
if_else.coverage
if_else.rs
if_not.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
if_not.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
if_not.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
if.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
if.coverage
if.rs
ignore_map.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
ignore_map.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
ignore_run.cov-map
ignore_run.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
inline-dead.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
inline-dead.coverage Tweak various coverage test files for slightly nicer formatting 2024-05-29 14:34:11 +10:00
inline-dead.rs Tweak various coverage test files for slightly nicer formatting 2024-05-29 14:34:11 +10:00
inline.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
inline.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
inline.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
inner_items.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
inner_items.coverage Tweak various coverage test files for slightly nicer formatting 2024-05-29 14:34:11 +10:00
inner_items.rs Tweak various coverage test files for slightly nicer formatting 2024-05-29 14:34:11 +10:00
issue-83601.cov-map Dereference immutable borrows in GVN. 2024-04-20 19:22:13 +00:00
issue-83601.coverage
issue-83601.rs
issue-84561.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
issue-84561.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
issue-84561.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
issue-85461.cov-map
issue-85461.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
issue-85461.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
issue-93054.cov-map
issue-93054.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
issue-93054.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
lazy_boolean.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
lazy_boolean.coverage
lazy_boolean.rs
let_else_loop.cov-map Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00
let_else_loop.coverage Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00
let_else_loop.rs Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00
long_and_wide.cov-map
long_and_wide.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
long_and_wide.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
loop_break_value.cov-map
loop_break_value.coverage
loop_break_value.rs
loops_branches.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
loops_branches.coverage
loops_branches.rs
macro_in_closure.cov-map
macro_in_closure.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
macro_in_closure.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
macro_name_span.cov-map coverage: Discard spans that fill the entire function body 2024-02-16 10:57:03 +11:00
macro_name_span.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
macro_name_span.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
match_or_pattern.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
match_or_pattern.coverage
match_or_pattern.rs
mcdc_if.cov-map coverage. Add basic tests for MC/DC 2024-04-20 00:34:40 +08:00
mcdc_if.coverage coverage. Add basic tests for MC/DC 2024-04-20 00:34:40 +08:00
mcdc_if.rs coverage. Add basic tests for MC/DC 2024-04-20 00:34:40 +08:00
mcdc_nested_if.cov-map tests(mcdc-coverage): Add tests for nested decision structures in mcdc_nested_if.rs 2024-04-29 09:13:41 +00:00
mcdc_nested_if.coverage tests(mcdc-coverage): Add tests for nested decision structures in mcdc_nested_if.rs 2024-04-29 09:13:41 +00:00
mcdc_nested_if.rs tests(mcdc-coverage): Add tests for nested decision structures in mcdc_nested_if.rs 2024-04-29 09:13:41 +00:00
nested_loops.cov-map
nested_loops.coverage
nested_loops.rs
no_cov_crate.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
no_cov_crate.coverage
no_cov_crate.rs
no_spans_if_not.cov-map macro_rules: Preserve all metavariable spans in a global side table 2024-02-18 11:19:24 +03:00
no_spans_if_not.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
no_spans_if_not.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
no_spans.cov-map macro_rules: Preserve all metavariable spans in a global side table 2024-02-18 11:19:24 +03:00
no_spans.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
no_spans.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
overflow.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
overflow.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
overflow.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
panic_unwind.cov-map
panic_unwind.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
panic_unwind.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
partial_eq.cov-map Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00
partial_eq.coverage Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00
partial_eq.rs Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00
README.md
simple_loop.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
simple_loop.coverage
simple_loop.rs
simple_match.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
simple_match.coverage
simple_match.rs
sort_groups.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
sort_groups.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
sort_groups.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
test_harness.cov-map
test_harness.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
test_harness.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
thin-lto.cov-map
thin-lto.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
thin-lto.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
tight_inf_loop.cov-map
tight_inf_loop.coverage
tight_inf_loop.rs
trivial.cov-map
trivial.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
trivial.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
try_error_result.cov-map Tweak various coverage test files for slightly nicer formatting 2024-05-29 14:34:11 +10:00
try_error_result.coverage Tweak various coverage test files for slightly nicer formatting 2024-05-29 14:34:11 +10:00
try_error_result.rs Tweak various coverage test files for slightly nicer formatting 2024-05-29 14:34:11 +10:00
unicode.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
unicode.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
unicode.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
unreachable.cov-map Eliminate UbCheck for non-standard libraries 2024-03-27 21:02:40 +08:00
unreachable.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
unreachable.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
unused_mod.cov-map
unused_mod.coverage
unused_mod.rs
unused.cov-map
unused.coverage
unused.rs
uses_crate.cov-map
uses_crate.coverage Tweak various coverage test files for slightly nicer formatting 2024-05-29 14:34:11 +10:00
uses_crate.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
uses_inline_crate.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
uses_inline_crate.coverage Tweak various coverage test files for slightly nicer formatting 2024-05-29 14:34:11 +10:00
uses_inline_crate.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
while_early_ret.cov-map
while_early_ret.coverage [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
while_early_ret.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
while.cov-map coverage: Simplify counter expressions using simple algebra 2024-05-14 13:58:40 +10:00
while.coverage
while.rs
yield.cov-map Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00
yield.coverage Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00
yield.rs Manually run x fmt on all source files in tests/coverage/ 2024-05-29 14:34:17 +10:00

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 both coverage-map and coverage-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.