From c45ee4bb29000cc0d02b11afa682852b5174b8a5 Mon Sep 17 00:00:00 2001 From: Rich Kadel Date: Mon, 16 Nov 2020 09:14:28 -0800 Subject: [PATCH 1/7] Coverage tests for remaining TerminatorKinds and async, improve Assert Tested and validate results for panic unwind, panic abort, assert!() macro, TerminatorKind::Assert (for example, numeric overflow), and async/await. Implemented a previous documented idea to change Assert handling to be the same as FalseUnwind and Goto, so it doesn't get its own BasicCoverageBlock anymore. This changed a couple of coverage regions, but I validated those changes are not any worse than the prior results, and probably help assure some consistency (even if some people might disagree with how the code region is consistently computed). Fixed issue with async/await. AggregateKind::Generator needs to be handled like AggregateKind::Closure; coverage span for the outer async function should not "cover" the async body, which is actually executed in a separate "closure" MIR. --- .../rustc_mir/src/util/generic_graphviz.rs | 8 +- .../source-based-code-coverage.md | 4 +- .../coverage-reports-base/Makefile | 3 + .../expected_export_coverage.abort.json | 59 +++ .../expected_export_coverage.assert.json | 59 +++ .../expected_export_coverage.async.json | 59 +++ .../expected_export_coverage.conditions.json | 28 +- .../expected_export_coverage.inner_items.json | 20 +- ...expected_export_coverage.nested_loops.json | 20 +- .../expected_export_coverage.overflow.json | 59 +++ ...expected_export_coverage.panic_unwind.json | 59 +++ .../expected_export_coverage.yield.json | 59 +++ .../expected_show_coverage.abort.txt | 35 ++ .../expected_show_coverage.assert.txt | 34 ++ .../expected_show_coverage.async.txt | 66 +++ .../expected_show_coverage.conditions.txt | 97 +++-- .../expected_show_coverage.inner_items.txt | 2 +- .../expected_show_coverage.nested_loops.txt | 2 +- .../expected_show_coverage.overflow.txt | 64 +++ .../expected_show_coverage.panic_unwind.txt | 50 +++ .../expected_show_coverage.yield.txt | 38 ++ .../expected_show_coverage_counters.abort.txt | 41 ++ ...expected_show_coverage_counters.assert.txt | 54 +++ .../expected_show_coverage_counters.async.txt | 84 ++++ ...cted_show_coverage_counters.conditions.txt | 358 +++++++++------- ...ted_show_coverage_counters.inner_items.txt | 26 +- ...ed_show_coverage_counters.nested_loops.txt | 42 +- ...pected_show_coverage_counters.overflow.txt | 53 +++ ...ed_show_coverage_counters.panic_unwind.txt | 50 +++ ...ted_show_coverage_counters.simple_loop.txt | 4 +- ...how_coverage_counters.try_error_result.txt | 8 +- ...show_coverage_counters.while_early_ret.txt | 2 +- .../expected_show_coverage_counters.yield.txt | 90 ++++ .../expected_export_coverage.abort.json | 59 +++ .../expected_export_coverage.assert.json | 59 +++ .../expected_export_coverage.async.json | 59 +++ .../expected_export_coverage.conditions.json | 28 +- .../expected_export_coverage.inner_items.json | 20 +- ...expected_export_coverage.nested_loops.json | 20 +- .../expected_export_coverage.overflow.json | 59 +++ ...expected_export_coverage.panic_unwind.json | 59 +++ .../expected_export_coverage.yield.json | 59 +++ .../expected_show_coverage.abort.txt | 35 ++ .../expected_show_coverage.assert.txt | 34 ++ .../expected_show_coverage.async.txt | 66 +++ .../expected_show_coverage.conditions.txt | 97 +++-- .../expected_show_coverage.inner_items.txt | 2 +- .../expected_show_coverage.nested_loops.txt | 2 +- .../expected_show_coverage.overflow.txt | 64 +++ .../expected_show_coverage.panic_unwind.txt | 50 +++ .../expected_show_coverage.yield.txt | 38 ++ .../expected_show_coverage_counters.abort.txt | 41 ++ ...expected_show_coverage_counters.assert.txt | 54 +++ .../expected_show_coverage_counters.async.txt | 85 ++++ ...cted_show_coverage_counters.conditions.txt | 358 +++++++++------- ...ted_show_coverage_counters.inner_items.txt | 26 +- ...ed_show_coverage_counters.nested_loops.txt | 42 +- ...pected_show_coverage_counters.overflow.txt | 53 +++ ...ed_show_coverage_counters.panic_unwind.txt | 50 +++ ...cted_show_coverage_counters.partial_eq.txt | 18 +- ...ted_show_coverage_counters.simple_loop.txt | 4 +- ...how_coverage_counters.try_error_result.txt | 8 +- ...show_coverage_counters.while_early_ret.txt | 2 +- .../expected_show_coverage_counters.yield.txt | 90 ++++ .../coverage-spanview-base/Makefile | 3 + ...ort.main.-------.InstrumentCoverage.0.html | 99 +++++ ...ht_abort.-------.InstrumentCoverage.0.html | 164 ++++++++ ...ert.main.-------.InstrumentCoverage.0.html | 103 +++++ ...l_assert.-------.InstrumentCoverage.0.html | 97 +++++ ...osure#0}.-------.InstrumentCoverage.0.html | 89 ++++ ...osure#1}.-------.InstrumentCoverage.0.html | 89 ++++ ...osure#2}.-------.InstrumentCoverage.0.html | 89 ++++ ...osure#3}.-------.InstrumentCoverage.0.html | 75 ++++ ...block_on.-------.InstrumentCoverage.0.html | 226 ++++++++++ ...osure#0}.-------.InstrumentCoverage.0.html | 75 ++++ .../async.f.-------.InstrumentCoverage.0.html | 74 ++++ ...osure#0}.-------.InstrumentCoverage.0.html | 75 ++++ ...sync.foo.-------.InstrumentCoverage.0.html | 74 ++++ ...osure#0}.-------.InstrumentCoverage.0.html | 80 ++++ .../async.g.-------.InstrumentCoverage.0.html | 79 ++++ ...osure#0}.-------.InstrumentCoverage.0.html | 80 ++++ .../async.h.-------.InstrumentCoverage.0.html | 79 ++++ ...osure#0}.-------.InstrumentCoverage.0.html | 82 ++++ .../async.i.-------.InstrumentCoverage.0.html | 79 ++++ ...ync.main.-------.InstrumentCoverage.0.html | 133 ++++++ ...ons.main.-------.InstrumentCoverage.0.html | 318 +++++++++----- ...-in_func.-------.InstrumentCoverage.0.html | 76 +++- ...ait_func.-------.InstrumentCoverage.0.html | 32 +- ...ops.main.-------.InstrumentCoverage.0.html | 56 ++- ...low.main.-------.InstrumentCoverage.0.html | 259 ++++++++++++ ...overflow.-------.InstrumentCoverage.0.html | 397 ++++++++++++++++++ ...ind.main.-------.InstrumentCoverage.0.html | 103 +++++ ...ht_panic.-------.InstrumentCoverage.0.html | 164 ++++++++ ...oop.main.-------.InstrumentCoverage.0.html | 9 +- ...ult.main.-------.InstrumentCoverage.0.html | 21 +- ...ret.main.-------.InstrumentCoverage.0.html | 9 +- ...osure#0}.-------.InstrumentCoverage.0.html | 79 ++++ ...osure#1}.-------.InstrumentCoverage.0.html | 81 ++++ ...eld.main.-------.InstrumentCoverage.0.html | 138 ++++++ ...ort.main.-------.InstrumentCoverage.0.html | 99 +++++ ...ht_abort.-------.InstrumentCoverage.0.html | 164 ++++++++ ...ert.main.-------.InstrumentCoverage.0.html | 103 +++++ ...l_assert.-------.InstrumentCoverage.0.html | 97 +++++ ...osure#0}.-------.InstrumentCoverage.0.html | 89 ++++ ...osure#1}.-------.InstrumentCoverage.0.html | 89 ++++ ...osure#2}.-------.InstrumentCoverage.0.html | 89 ++++ ...osure#3}.-------.InstrumentCoverage.0.html | 75 ++++ ...block_on.-------.InstrumentCoverage.0.html | 226 ++++++++++ ...osure#0}.-------.InstrumentCoverage.0.html | 75 ++++ .../async.f.-------.InstrumentCoverage.0.html | 74 ++++ ...osure#0}.-------.InstrumentCoverage.0.html | 75 ++++ ...sync.foo.-------.InstrumentCoverage.0.html | 74 ++++ ...osure#0}.-------.InstrumentCoverage.0.html | 80 ++++ .../async.g.-------.InstrumentCoverage.0.html | 79 ++++ ...osure#0}.-------.InstrumentCoverage.0.html | 80 ++++ .../async.h.-------.InstrumentCoverage.0.html | 79 ++++ ...osure#0}.-------.InstrumentCoverage.0.html | 82 ++++ .../async.i.-------.InstrumentCoverage.0.html | 79 ++++ ...ync.main.-------.InstrumentCoverage.0.html | 133 ++++++ ...ons.main.-------.InstrumentCoverage.0.html | 318 +++++++++----- ...-in_func.-------.InstrumentCoverage.0.html | 76 +++- ...ait_func.-------.InstrumentCoverage.0.html | 32 +- ...ops.main.-------.InstrumentCoverage.0.html | 56 ++- ...low.main.-------.InstrumentCoverage.0.html | 259 ++++++++++++ ...overflow.-------.InstrumentCoverage.0.html | 397 ++++++++++++++++++ ...ind.main.-------.InstrumentCoverage.0.html | 103 +++++ ...ht_panic.-------.InstrumentCoverage.0.html | 164 ++++++++ ...oop.main.-------.InstrumentCoverage.0.html | 9 +- ...ult.main.-------.InstrumentCoverage.0.html | 21 +- ...ret.main.-------.InstrumentCoverage.0.html | 9 +- ...osure#0}.-------.InstrumentCoverage.0.html | 79 ++++ ...osure#1}.-------.InstrumentCoverage.0.html | 81 ++++ ...eld.main.-------.InstrumentCoverage.0.html | 138 ++++++ src/test/run-make-fulldeps/coverage/abort.rs | 34 ++ src/test/run-make-fulldeps/coverage/assert.rs | 32 ++ src/test/run-make-fulldeps/coverage/async.rs | 64 +++ .../run-make-fulldeps/coverage/conditions.rs | 36 ++ .../coverage/coverage_tools.mk | 5 - .../run-make-fulldeps/coverage/overflow.rs | 63 +++ .../coverage/panic_unwind.rs | 49 +++ src/test/run-make-fulldeps/coverage/yield.rs | 37 ++ src/tools/compiletest/src/main.rs | 2 - 142 files changed, 10102 insertions(+), 867 deletions(-) create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.abort.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.assert.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.async.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.overflow.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.panic_unwind.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.yield.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.abort.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.assert.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.async.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.overflow.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.panic_unwind.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.yield.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.abort.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.assert.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.async.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.overflow.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.panic_unwind.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.yield.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.abort.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.assert.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.async.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.overflow.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.panic_unwind.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.yield.json create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.abort.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.assert.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.async.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.overflow.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.panic_unwind.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.yield.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.abort.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.assert.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.async.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.overflow.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.panic_unwind.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.yield.txt create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.yield/yield.main-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage/abort.rs create mode 100644 src/test/run-make-fulldeps/coverage/assert.rs create mode 100644 src/test/run-make-fulldeps/coverage/async.rs create mode 100644 src/test/run-make-fulldeps/coverage/overflow.rs create mode 100644 src/test/run-make-fulldeps/coverage/panic_unwind.rs create mode 100644 src/test/run-make-fulldeps/coverage/yield.rs diff --git a/compiler/rustc_mir/src/util/generic_graphviz.rs b/compiler/rustc_mir/src/util/generic_graphviz.rs index 8bd4a512bbb05..fd55a4dfc4c92 100644 --- a/compiler/rustc_mir/src/util/generic_graphviz.rs +++ b/compiler/rustc_mir/src/util/generic_graphviz.rs @@ -116,9 +116,13 @@ impl< write!(w, r#""#)?; - // FIXME(richkadel): Need generic way to know if node header should have a different color + // FIXME(richkadel): If/when migrating the MIR graphviz to this generic implementation, + // we need generic way to know if node header should have a different color. For example, + // for MIR: + // // let (blk, bgcolor) = if data.is_cleanup { - // (format!("{:?} (cleanup)", node), "lightblue") + // let color = if dark_mode { "royalblue" } else { "lightblue" }; + // (format!("{:?} (cleanup)", node), color) // } else { // let color = if dark_mode { "dimgray" } else { "gray" }; // (format!("{:?}", node), color) diff --git a/src/doc/unstable-book/src/compiler-flags/source-based-code-coverage.md b/src/doc/unstable-book/src/compiler-flags/source-based-code-coverage.md index 1dd7272e0f92a..0eb425e42aad7 100644 --- a/src/doc/unstable-book/src/compiler-flags/source-based-code-coverage.md +++ b/src/doc/unstable-book/src/compiler-flags/source-based-code-coverage.md @@ -1,8 +1,6 @@ # `source-based-code-coverage` -The feature request for this feature is: [#34701] - -The Major Change Proposal (MCP) for this feature is: [#278](https://github.com/rust-lang/compiler-team/issues/278) +The tracking issue for this feature is: [#79121](https://github.com/rust-lang/rust/issues/79121). ------------------------ diff --git a/src/test/run-make-fulldeps/coverage-reports-base/Makefile b/src/test/run-make-fulldeps/coverage-reports-base/Makefile index 2dac8fc2225bf..6ccff43dcdfd8 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/Makefile +++ b/src/test/run-make-fulldeps/coverage-reports-base/Makefile @@ -54,6 +54,9 @@ endif %: $(SOURCEDIR)/%.rs # Compile the test program with coverage instrumentation and generate relevant MIR. $(RUSTC) $(SOURCEDIR)/$@.rs \ + $$( grep -q '^\/\/ require-rust-edition-2018' $(SOURCEDIR)/$@.rs && \ + echo "--edition=2018" \ + ) \ -Zinstrument-coverage \ -Clink-dead-code=$(LINK_DEAD_CODE) diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.abort.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.abort.json new file mode 100644 index 0000000000000..33cfc9f3ed72c --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.abort.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/abort.rs", + "summary": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 15, + "covered": 13, + "percent": 86.66666666666667 + }, + "regions": { + "count": 10, + "covered": 9, + "notcovered": 1, + "percent": 90 + } + } + } + ], + "totals": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 15, + "covered": 13, + "percent": 86.66666666666667 + }, + "regions": { + "count": 10, + "covered": 9, + "notcovered": 1, + "percent": 90 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.assert.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.assert.json new file mode 100644 index 0000000000000..aa2a0cbebe77e --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.assert.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/assert.rs", + "summary": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 13, + "covered": 10, + "percent": 76.92307692307693 + }, + "regions": { + "count": 14, + "covered": 12, + "notcovered": 2, + "percent": 85.71428571428571 + } + } + } + ], + "totals": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 13, + "covered": 10, + "percent": 76.92307692307693 + }, + "regions": { + "count": 14, + "covered": 12, + "notcovered": 2, + "percent": 85.71428571428571 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.async.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.async.json new file mode 100644 index 0000000000000..004bedeea6280 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.async.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/async.rs", + "summary": { + "functions": { + "count": 9, + "covered": 9, + "percent": 100 + }, + "instantiations": { + "count": 9, + "covered": 9, + "percent": 100 + }, + "lines": { + "count": 31, + "covered": 30, + "percent": 96.7741935483871 + }, + "regions": { + "count": 21, + "covered": 18, + "notcovered": 3, + "percent": 85.71428571428571 + } + } + } + ], + "totals": { + "functions": { + "count": 9, + "covered": 9, + "percent": 100 + }, + "instantiations": { + "count": 9, + "covered": 9, + "percent": 100 + }, + "lines": { + "count": 31, + "covered": 30, + "percent": 96.7741935483871 + }, + "regions": { + "count": 21, + "covered": 18, + "notcovered": 3, + "percent": 85.71428571428571 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.conditions.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.conditions.json index ed937a1b13f38..d69ca80839a30 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.conditions.json +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.conditions.json @@ -16,15 +16,15 @@ "percent": 100 }, "lines": { - "count": 49, - "covered": 23, - "percent": 46.93877551020408 + "count": 64, + "covered": 33, + "percent": 51.5625 }, "regions": { - "count": 69, - "covered": 18, - "notcovered": 51, - "percent": 26.08695652173913 + "count": 88, + "covered": 25, + "notcovered": 63, + "percent": 28.40909090909091 } } } @@ -41,15 +41,15 @@ "percent": 100 }, "lines": { - "count": 49, - "covered": 23, - "percent": 46.93877551020408 + "count": 64, + "covered": 33, + "percent": 51.5625 }, "regions": { - "count": 69, - "covered": 18, - "notcovered": 51, - "percent": 26.08695652173913 + "count": 88, + "covered": 25, + "notcovered": 63, + "percent": 28.40909090909091 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.inner_items.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.inner_items.json index c178e7f93476f..5dc82d2168ccd 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.inner_items.json +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.inner_items.json @@ -16,15 +16,15 @@ "percent": 100 }, "lines": { - "count": 26, - "covered": 26, + "count": 27, + "covered": 27, "percent": 100 }, "regions": { - "count": 15, - "covered": 13, + "count": 11, + "covered": 9, "notcovered": 2, - "percent": 86.66666666666667 + "percent": 81.81818181818183 } } } @@ -41,15 +41,15 @@ "percent": 100 }, "lines": { - "count": 26, - "covered": 26, + "count": 27, + "covered": 27, "percent": 100 }, "regions": { - "count": 15, - "covered": 13, + "count": 11, + "covered": 9, "notcovered": 2, - "percent": 86.66666666666667 + "percent": 81.81818181818183 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.nested_loops.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.nested_loops.json index 68163eb763619..ce3c957e660c5 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.nested_loops.json +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.nested_loops.json @@ -16,15 +16,15 @@ "percent": 100 }, "lines": { - "count": 21, + "count": 22, "covered": 16, - "percent": 76.19047619047619 + "percent": 72.72727272727273 }, "regions": { - "count": 18, - "covered": 14, + "count": 17, + "covered": 13, "notcovered": 4, - "percent": 77.77777777777779 + "percent": 76.47058823529412 } } } @@ -41,15 +41,15 @@ "percent": 100 }, "lines": { - "count": 21, + "count": 22, "covered": 16, - "percent": 76.19047619047619 + "percent": 72.72727272727273 }, "regions": { - "count": 18, - "covered": 14, + "count": 17, + "covered": 13, "notcovered": 4, - "percent": 77.77777777777779 + "percent": 76.47058823529412 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.overflow.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.overflow.json new file mode 100644 index 0000000000000..176bfd7abebac --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.overflow.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/overflow.rs", + "summary": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 21, + "covered": 17, + "percent": 80.95238095238095 + }, + "regions": { + "count": 14, + "covered": 12, + "notcovered": 2, + "percent": 85.71428571428571 + } + } + } + ], + "totals": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 21, + "covered": 17, + "percent": 80.95238095238095 + }, + "regions": { + "count": 14, + "covered": 12, + "notcovered": 2, + "percent": 85.71428571428571 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.panic_unwind.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.panic_unwind.json new file mode 100644 index 0000000000000..5b13109dbe6b2 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.panic_unwind.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/panic_unwind.rs", + "summary": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 17, + "covered": 14, + "percent": 82.35294117647058 + }, + "regions": { + "count": 13, + "covered": 11, + "notcovered": 2, + "percent": 84.61538461538461 + } + } + } + ], + "totals": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 17, + "covered": 14, + "percent": 82.35294117647058 + }, + "regions": { + "count": 13, + "covered": 11, + "notcovered": 2, + "percent": 84.61538461538461 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.yield.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.yield.json new file mode 100644 index 0000000000000..9f25bc971c558 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.yield.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/yield.rs", + "summary": { + "functions": { + "count": 3, + "covered": 3, + "percent": 100 + }, + "instantiations": { + "count": 3, + "covered": 3, + "percent": 100 + }, + "lines": { + "count": 23, + "covered": 16, + "percent": 69.56521739130434 + }, + "regions": { + "count": 22, + "covered": 16, + "notcovered": 6, + "percent": 72.72727272727273 + } + } + } + ], + "totals": { + "functions": { + "count": 3, + "covered": 3, + "percent": 100 + }, + "instantiations": { + "count": 3, + "covered": 3, + "percent": 100 + }, + "lines": { + "count": 23, + "covered": 16, + "percent": 69.56521739130434 + }, + "regions": { + "count": 22, + "covered": 16, + "notcovered": 6, + "percent": 72.72727272727273 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.abort.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.abort.txt new file mode 100644 index 0000000000000..40c9c71a2aad4 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.abort.txt @@ -0,0 +1,35 @@ + 1| |#![feature(unwind_attributes)] + 2| |#![allow(unused_assignments)] + 3| | + 4| |#[unwind(aborts)] + 5| |fn might_abort(should_abort: bool) { + 6| 4| if should_abort { + 7| 0| println!("aborting..."); + 8| 0| panic!("panics and aborts"); + 9| 4| } else { + 10| 4| println!("Don't Panic"); + 11| 4| } + 12| 4|} + 13| | + 14| |fn main() -> Result<(),u8> { + 15| 1| let mut countdown = 10; + 16| 11| while countdown > 0 { + 17| 10| if countdown < 5 { + 18| 4| might_abort(false); + 19| 6| } + 20| 10| countdown -= 1; + 21| | } + 22| 1| Ok(()) + 23| 1|} + 24| | + 25| |// Notes: + 26| |// 1. Compare this program and its coverage results to those of the similar tests + 27| |// `panic_unwind.rs` and `try_error_result.rs`. + 28| |// 2. This test confirms the coverage generated when a program includes `TerminatorKind::Abort`. + 29| |// 3. The test does not invoke the abort. By executing to a successful completion, the coverage + 30| |// results show where the program did and did not execute. + 31| |// 4. If the program actually aborted, the coverage counters would not be saved (which "works as + 32| |// intended"). Coverage results would show no executed coverage regions. + 33| |// 6. If `should_abort` is `true` and the program aborts, the program exits with a `132` status + 34| |// (on Linux at least). + diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.assert.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.assert.txt new file mode 100644 index 0000000000000..a6efcbabd3522 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.assert.txt @@ -0,0 +1,34 @@ + 1| |#![allow(unused_assignments)] + 2| |// expect-exit-status-101 + 3| | + 4| |fn might_fail_assert(one_plus_one: u32) { + 5| 4| println!("does 1 + 1 = {}?", one_plus_one); + 6| 4| assert_eq!(1 + 1, one_plus_one, "the argument was wrong"); + ^1 + 7| 3|} + 8| | + 9| |fn main() -> Result<(),u8> { + 10| 1| let mut countdown = 10; + 11| 10| while countdown > 0 { + 12| 10| if countdown == 1 { + 13| 0| might_fail_assert(3); + 14| 10| } else if countdown < 5 { + 15| 3| might_fail_assert(2); + 16| 15| } + 17| 9| countdown -= 1; + 18| | } + 19| 0| Ok(()) + 20| 0|} + 21| | + 22| |// Notes: + 23| |// 1. Compare this program and its coverage results to those of the very similar test + 24| |// `panic_unwind.rs`, and similar tests `abort.rs` and `try_error_result.rs`. + 25| |// 2. This test confirms the coverage generated when a program passes or fails an `assert!()` or + 26| |// related `assert_*!()` macro. + 27| |// 3. Notably, the `assert` macros *do not* generate `TerminatorKind::Assert`. The macros produce + 28| |// conditional expressions, `TerminatorKind::SwitchInt` branches, and a possible call to + 29| |// `begin_panic_fmt()` (that begins a panic unwind, if the assertion test fails). + 30| |// 4. `TerminatoKind::Assert` is, however, also present in the MIR generated for this test + 31| |// (and in many other coverage tests). The `Assert` terminator is typically generated by the + 32| |// Rust compiler to check for runtime failures, such as numeric overflows. + diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.async.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.async.txt new file mode 100644 index 0000000000000..b5d99732102d0 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.async.txt @@ -0,0 +1,66 @@ + 1| |#![allow(unused_assignments)] + 2| | + 3| |// require-rust-edition-2018 + 4| | + 5| 1|async fn f() -> u8 { 1 } + 6| | + 7| |async fn foo() -> [bool; 10] { [false; 10] } + 8| | + 9| |pub async fn g(x: u8) { + 10| | match x { + 11| | y if f().await == y => (), + 12| | _ => (), + 13| | } + 14| 1|} + 15| | + 16| |// #78366: check the reference to the binding is recorded even if the binding is not autorefed + 17| | + 18| |async fn h(x: usize) { + 19| | match x { + 20| | y if foo().await[y] => (), + 21| | _ => (), + 22| | } + 23| 1|} + 24| | + 25| 1|async fn i(x: u8) { + 26| 1| match x { + 27| 1| y if f().await == y + 1 => (), + ^0 ^0 + 28| 1| _ => (), + 29| | } + 30| 2|} + 31| | + 32| 1|fn main() { + 33| 1| let _ = g(10); + 34| 1| let _ = h(9); + 35| 1| let mut future = Box::pin(i(8)); + 36| 1| executor::block_on(future.as_mut()); + 37| 1|} + 38| | + 39| |mod executor { + 40| | use core::{ + 41| | future::Future, + 42| | pin::Pin, + 43| | task::{Context, Poll, RawWaker, RawWakerVTable, Waker}, + 44| | }; + 45| | + 46| | pub fn block_on(mut future: F) -> F::Output { + 47| 1| let mut future = unsafe { Pin::new_unchecked(&mut future) }; + 48| 1| + 49| 1| static VTABLE: RawWakerVTable = RawWakerVTable::new( + 50| 1| |_| unimplemented!("clone"), + 51| 1| |_| unimplemented!("wake"), + 52| 1| |_| unimplemented!("wake_by_ref"), + 53| 1| |_| (), + 54| 1| ); + 55| 1| let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; + 56| 1| let mut context = Context::from_waker(&waker); + 57| | + 58| | loop { + 59| 1| if let Poll::Ready(val) = future.as_mut().poll(&mut context) { + 60| 1| break val; + 61| | } + 62| 0| } + 63| 1| } + 64| |} + diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.conditions.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.conditions.txt index 173ff4aa4c481..e55a574c056b8 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.conditions.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.conditions.txt @@ -27,7 +27,8 @@ 27| | 28| 1| if countdown > 7 { 29| 1| countdown -= 4; - 30| 0| } else if countdown > 2 { + 30| 1| } else if countdown > 2 { + ^0 31| 0| if countdown < 1 || countdown > 5 || countdown != 9 { 32| 0| countdown = 0; 33| 0| } @@ -36,34 +37,70 @@ 36| 0| return; 37| | } 38| | - 39| 1| let mut countdown = 0; - 40| 1| if true { - 41| 1| countdown = 1; - 42| 1| } - 43| | - 44| 1| let z = if countdown > 7 { - ^0 - 45| 0| countdown -= 4; - 46| 1| } else if countdown > 2 { - 47| 0| if countdown < 1 || countdown > 5 || countdown != 9 { - 48| 0| countdown = 0; - 49| 0| } - 50| 0| countdown -= 5; - 51| | } else { - 52| 1| let should_be_reachable = countdown; - 53| 1| println!("reached"); - 54| 1| return; - 55| | }; + 39| 1| if true { + 40| | // Demonstrate the difference with `TerminatorKind::Assert` as of 2020-11-15. Assert is no + 41| | // longer treated as a `BasicCoverageBlock` terminator, which changed the coverage region, + 42| | // for the executed `then` block above, to include the closing brace on line 30. That + 43| | // changed the line count, but the coverage code region (for the `else if` condition) is + 44| | // still valid. + 45| | // + 46| | // Note that `if` (then) and `else` blocks include the closing brace in their coverage + 47| | // code regions when the last line in the block ends in a semicolon, because the Rust + 48| | // compiler inserts a `StatementKind::Assign` to assign `const ()` to a `Place`, for the + 49| | // empty value for the executed block. When the last line does not end in a semicolon + 50| | // (that is, when the block actually results in a value), the additional `Assign` is not + 51| | // generated, and the brace is not included. + 52| 1| let mut countdown = 0; + 53| 1| if true { + 54| 1| countdown = 10; + 55| 1| } 56| | - 57| 0| let w = if countdown > 7 { - 58| 0| countdown -= 4; - 59| 0| } else if countdown > 2 { - 60| 0| if countdown < 1 || countdown > 5 || countdown != 9 { - 61| 0| countdown = 0; - 62| 0| } - 63| 0| countdown -= 5; - 64| | } else { - 65| 0| return; - 66| | }; - 67| 1|} + 57| 1| if countdown > 7 { + 58| 1| countdown -= 4; + 59| 1| } + 60| | // The closing brace of the `then` branch is now included in the coverage region, and shown + 61| | // as "executed" (giving its line a count of 1 here). Since, in the original version above, + 62| | // the closing brace shares the same line as the `else if` conditional expression (which is + 63| | // not executed if the first `then` condition is true), only the condition's code region is + 64| | // marked with a count of 0 now. + 65| 0| else if countdown > 2 { + 66| 0| if countdown < 1 || countdown > 5 || countdown != 9 { + 67| 0| countdown = 0; + 68| 0| } + 69| 0| countdown -= 5; + 70| | } else { + 71| 0| return; + 72| | } + 73| 1| } + 74| | + 75| 1| let mut countdown = 0; + 76| 1| if true { + 77| 1| countdown = 1; + 78| 1| } + 79| | + 80| 1| let z = if countdown > 7 { + ^0 + 81| 0| countdown -= 4; + 82| 1| } else if countdown > 2 { + 83| 0| if countdown < 1 || countdown > 5 || countdown != 9 { + 84| 0| countdown = 0; + 85| 0| } + 86| 0| countdown -= 5; + 87| | } else { + 88| 1| let should_be_reachable = countdown; + 89| 1| println!("reached"); + 90| 1| return; + 91| | }; + 92| | + 93| 0| let w = if countdown > 7 { + 94| 0| countdown -= 4; + 95| 0| } else if countdown > 2 { + 96| 0| if countdown < 1 || countdown > 5 || countdown != 9 { + 97| 0| countdown = 0; + 98| 0| } + 99| 0| countdown -= 5; + 100| | } else { + 101| 0| return; + 102| | }; + 103| 1|} diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.inner_items.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.inner_items.txt index 4a51f842a4bb2..efd9cd4f72d3e 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.inner_items.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.inner_items.txt @@ -38,7 +38,7 @@ 37| | } 38| | 39| | impl InTrait for InStruct { - 40| | fn trait_func(&mut self, incr: u32) { + 40| 1| fn trait_func(&mut self, incr: u32) { 41| 1| self.in_struct_field += incr; 42| 1| in_func(self.in_struct_field); 43| 1| } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.nested_loops.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.nested_loops.txt index c9f373bf6a7c0..dd86a85815b3b 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.nested_loops.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.nested_loops.txt @@ -15,7 +15,7 @@ 15| 1| a -= 10; 16| 1| if is_true { 17| 1| break 'outer; - 18| | } else { + 18| 0| } else { 19| 0| a -= 2; 20| 0| } 21| 2| } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.overflow.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.overflow.txt new file mode 100644 index 0000000000000..322de1da25a26 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.overflow.txt @@ -0,0 +1,64 @@ + 1| |#![allow(unused_assignments)] + 2| |// expect-exit-status-101 + 3| | + 4| |fn might_overflow(to_add: u32) -> u32 { + 5| 4| if to_add > 5 { + 6| 1| println!("this will probably overflow"); + 7| 3| } + 8| 4| let add_to = u32::MAX - 5; + 9| 4| println!("does {} + {} overflow?", add_to, to_add); + 10| 4| let result = to_add + add_to; + 11| 4| println!("continuing after overflow check"); + 12| 4| result + 13| 4|} + 14| | + 15| |fn main() -> Result<(),u8> { + 16| 1| let mut countdown = 10; + 17| 10| while countdown > 0 { + 18| 10| if countdown == 1 { + 19| 0| let result = might_overflow(10); + 20| 0| println!("Result: {}", result); + 21| 10| } else if countdown < 5 { + 22| 3| let result = might_overflow(1); + 23| 3| println!("Result: {}", result); + 24| 15| } + 25| 9| countdown -= 1; + 26| | } + 27| 0| Ok(()) + 28| 0|} + 29| | + 30| |// Notes: + 31| |// 1. Compare this program and its coverage results to those of the very similar test `assert.rs`, + 32| |// and similar tests `panic_unwind.rs`, abort.rs` and `try_error_result.rs`. + 33| |// 2. This test confirms the coverage generated when a program passes or fails a + 34| |// compiler-generated `TerminatorKind::Assert` (based on an overflow check, in this case). + 35| |// 3. Similar to how the coverage instrumentation handles `TerminatorKind::Call`, + 36| |// compiler-generated assertion failures are assumed to be a symptom of a program bug, not + 37| |// expected behavior. To simplify the coverage graphs and keep instrumented programs as + 38| |// small and fast as possible, `Assert` terminators are assumed to always succeed, and + 39| |// therefore are considered "non-branching" terminators. So, an `Assert` terminator does not + 40| |// get its own coverage counter. + 41| |// 4. After an unhandled panic or failed Assert, coverage results may not always be intuitive. + 42| |// In this test, the final count for the statements after the `if` block in `might_overflow()` + 43| |// is 4, even though the lines after `to_add + add_to` were executed only 3 times. Depending + 44| |// on the MIR graph and the structure of the code, this count could have been 3 (which might + 45| |// have been valid for the overflowed add `+`, but should have been 4 for the lines before + 46| |// the overflow. The reason for this potential uncertainty is, a `CounterKind` is incremented + 47| |// via StatementKind::Counter at the end of the block, but (as in the case in this test), + 48| |// a CounterKind::Expression is always evaluated. In this case, the expression was based on + 49| |// a `Counter` incremented as part of the evaluation of the `if` expression, which was + 50| |// executed, and counted, 4 times, before reaching the overflow add. + 51| | + 52| |// If the program did not overflow, the coverage for `might_overflow()` would look like this: + 53| |// + 54| |// 4| |fn might_overflow(to_add: u32) -> u32 { + 55| |// 5| 4| if to_add > 5 { + 56| |// 6| 0| println!("this will probably overflow"); + 57| |// 7| 4| } + 58| |// 8| 4| let add_to = u32::MAX - 5; + 59| |// 9| 4| println!("does {} + {} overflow?", add_to, to_add); + 60| |// 10| 4| let result = to_add + add_to; + 61| |// 11| 4| println!("continuing after overflow check"); + 62| |// 12| 4| result + 63| |// 13| 4|} + diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.panic_unwind.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.panic_unwind.txt new file mode 100644 index 0000000000000..f5149c11b7be0 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.panic_unwind.txt @@ -0,0 +1,50 @@ + 1| |#![allow(unused_assignments)] + 2| |// expect-exit-status-101 + 3| | + 4| |fn might_panic(should_panic: bool) { + 5| 4| if should_panic { + 6| 1| println!("panicking..."); + 7| 1| panic!("panics"); + 8| 3| } else { + 9| 3| println!("Don't Panic"); + 10| 3| } + 11| 3|} + 12| | + 13| |fn main() -> Result<(),u8> { + 14| 1| let mut countdown = 10; + 15| 10| while countdown > 0 { + 16| 10| if countdown == 1 { + 17| 0| might_panic(true); + 18| 10| } else if countdown < 5 { + 19| 3| might_panic(false); + 20| 15| } + 21| 9| countdown -= 1; + 22| | } + 23| 0| Ok(()) + 24| 0|} + 25| | + 26| |// Notes: + 27| |// 1. Compare this program and its coverage results to those of the similar tests `abort.rs` and + 28| |// `try_error_result.rs`. + 29| |// 2. Since the `panic_unwind.rs` test is allowed to unwind, it is also allowed to execute the + 30| |// normal program exit cleanup, including writing out the current values of the coverage + 31| |// counters. + 32| |// 3. The coverage results show (interestingly) that the `panic!()` call did execute, but it does + 33| |// not show coverage of the `if countdown == 1` branch in `main()` that calls + 34| |// `might_panic(true)` (causing the call to `panic!()`). + 35| |// 4. The reason `main()`s `if countdown == 1` branch, calling `might_panic(true)`, appears + 36| |// "uncovered" is, InstrumentCoverage (intentionally) treats `TerminatorKind::Call` terminators + 37| |// as non-branching, because when a program executes normally, they always are. Errors handled + 38| |// via the try `?` operator produce error handling branches that *are* treated as branches in + 39| |// coverage results. By treating calls without try `?` operators as non-branching (assumed to + 40| |// return normally and continue) the coverage graph can be simplified, producing smaller, + 41| |// faster binaries, and cleaner coverage results. + 42| |// 5. The reason the coverage results actually show `panic!()` was called is most likely because + 43| |// `panic!()` is a macro, not a simple function call, and there are other `Statement`s and/or + 44| |// `Terminator`s that execute with a coverage counter before the panic and unwind occur. + 45| |// 6. By best practice, programs should not panic. By design, the coverage implementation will not + 46| |// incur additional cost (in program size and execution time) to improve coverage results for + 47| |// an event that is not supposted to happen. + 48| |// 7. FIXME(#78544): This issue describes a feature request for a proposed option to enable + 49| |// more accurate coverage results for tests that intentionally panic. + diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.yield.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.yield.txt new file mode 100644 index 0000000000000..28813dd6d0b07 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.yield.txt @@ -0,0 +1,38 @@ + 1| |#![feature(generators, generator_trait)] + 2| |#![allow(unused_assignments)] + 3| | + 4| |use std::ops::{Generator, GeneratorState}; + 5| |use std::pin::Pin; + 6| | + 7| |fn main() { + 8| 1| let mut generator = || { + 9| 1| yield 1; + 10| 1| return "foo" + 11| 1| }; + 12| | + 13| 1| match Pin::new(&mut generator).resume(()) { + 14| 1| GeneratorState::Yielded(1) => {} + 15| 0| _ => panic!("unexpected value from resume"), + 16| | } + 17| 1| match Pin::new(&mut generator).resume(()) { + 18| 1| GeneratorState::Complete("foo") => {} + 19| 0| _ => panic!("unexpected value from resume"), + 20| | } + 21| | + 22| 1| let mut generator = || { + 23| 1| yield 1; + 24| 1| yield 2; + 25| 0| yield 3; + 26| 0| return "foo" + 27| 0| }; + 28| | + 29| 1| match Pin::new(&mut generator).resume(()) { + 30| 1| GeneratorState::Yielded(1) => {} + 31| 0| _ => panic!("unexpected value from resume"), + 32| | } + 33| 1| match Pin::new(&mut generator).resume(()) { + 34| 1| GeneratorState::Yielded(2) => {} + 35| 0| _ => panic!("unexpected value from resume"), + 36| | } + 37| 1|} + diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.abort.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.abort.txt new file mode 100644 index 0000000000000..e787e5e152d56 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.abort.txt @@ -0,0 +1,41 @@ +Counter in file 0 15:9 -> 15:27, #1 +Counter in file 0 16:11 -> 16:24, (#1 + (#2 + #3)) +Counter in file 0 17:12 -> 17:25, ((#1 + (#2 + #3)) - #4) +Counter in file 0 17:26 -> 19:10, #2 +Counter in file 0 19:10 -> 19:11, #3 +Counter in file 0 20:9 -> 20:23, (#2 + #3) +Counter in file 0 22:5 -> 23:2, #4 +Counter in file 0 6:8 -> 6:20, #1 +Counter in file 0 7:9 -> 8:37, #2 +Counter in file 0 9:12 -> 12:2, (#1 - #2) +Emitting segments for file: ../coverage/abort.rs +Combined regions: + 6:8 -> 6:20 (count=4) + 7:9 -> 8:37 (count=0) + 9:12 -> 12:2 (count=4) + 15:9 -> 15:27 (count=1) + 16:11 -> 16:24 (count=11) + 17:12 -> 17:25 (count=10) + 17:26 -> 19:10 (count=4) + 19:10 -> 19:11 (count=6) + 20:9 -> 20:23 (count=10) + 22:5 -> 23:2 (count=1) +Segment at 6:8 (count = 4), RegionEntry +Segment at 6:20 (count = 0), Skipped +Segment at 7:9 (count = 0), RegionEntry +Segment at 8:37 (count = 0), Skipped +Segment at 9:12 (count = 4), RegionEntry +Segment at 12:2 (count = 0), Skipped +Segment at 15:9 (count = 1), RegionEntry +Segment at 15:27 (count = 0), Skipped +Segment at 16:11 (count = 11), RegionEntry +Segment at 16:24 (count = 0), Skipped +Segment at 17:12 (count = 10), RegionEntry +Segment at 17:25 (count = 0), Skipped +Segment at 17:26 (count = 4), RegionEntry +Segment at 19:10 (count = 6), RegionEntry +Segment at 19:11 (count = 0), Skipped +Segment at 20:9 (count = 10), RegionEntry +Segment at 20:23 (count = 0), Skipped +Segment at 22:5 (count = 1), RegionEntry +Segment at 23:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.assert.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.assert.txt new file mode 100644 index 0000000000000..81cb6c03da702 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.assert.txt @@ -0,0 +1,54 @@ +Counter in file 0 10:9 -> 10:27, #1 +Counter in file 0 11:11 -> 11:24, (#1 + (#2 + (#3 + #4))) +Counter in file 0 12:12 -> 12:26, ((#1 + (#2 + (#3 + #4))) - #5) +Counter in file 0 12:27 -> 14:10, #2 +Counter in file 0 14:19 -> 14:32, (((#1 + (#2 + (#3 + #4))) - #5) - #2) +Counter in file 0 14:33 -> 16:10, #3 +Counter in file 0 16:10 -> 16:11, #4 +Counter in file 0 16:10 -> 16:11, (#3 + #4) +Counter in file 0 17:9 -> 17:23, (#2 + (#3 + #4)) +Counter in file 0 19:5 -> 20:2, #5 +Counter in file 0 5:5 -> 5:48, #1 +Counter in file 0 6:16 -> 6:21, (#1 + 0) +Counter in file 0 6:37 -> 6:61, #2 +Counter in file 0 7:1 -> 7:2, (#1 - #2) +Emitting segments for file: ../coverage/assert.rs +Combined regions: + 5:5 -> 5:48 (count=4) + 6:16 -> 6:21 (count=4) + 6:37 -> 6:61 (count=1) + 7:1 -> 7:2 (count=3) + 10:9 -> 10:27 (count=1) + 11:11 -> 11:24 (count=10) + 12:12 -> 12:26 (count=10) + 12:27 -> 14:10 (count=0) + 14:19 -> 14:32 (count=10) + 14:33 -> 16:10 (count=3) + 16:10 -> 16:11 (count=15) + 17:9 -> 17:23 (count=9) + 19:5 -> 20:2 (count=0) +Segment at 5:5 (count = 4), RegionEntry +Segment at 5:48 (count = 0), Skipped +Segment at 6:16 (count = 4), RegionEntry +Segment at 6:21 (count = 0), Skipped +Segment at 6:37 (count = 1), RegionEntry +Segment at 6:61 (count = 0), Skipped +Segment at 7:1 (count = 3), RegionEntry +Segment at 7:2 (count = 0), Skipped +Segment at 10:9 (count = 1), RegionEntry +Segment at 10:27 (count = 0), Skipped +Segment at 11:11 (count = 10), RegionEntry +Segment at 11:24 (count = 0), Skipped +Segment at 12:12 (count = 10), RegionEntry +Segment at 12:26 (count = 0), Skipped +Segment at 12:27 (count = 0), RegionEntry +Segment at 14:10 (count = 0), Skipped +Segment at 14:19 (count = 10), RegionEntry +Segment at 14:32 (count = 0), Skipped +Segment at 14:33 (count = 3), RegionEntry +Segment at 16:10 (count = 15), RegionEntry +Segment at 16:11 (count = 0), Skipped +Segment at 17:9 (count = 9), RegionEntry +Segment at 17:23 (count = 0), Skipped +Segment at 19:5 (count = 0), RegionEntry +Segment at 20:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.async.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.async.txt new file mode 100644 index 0000000000000..0490a319856b7 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.async.txt @@ -0,0 +1,84 @@ +Counter in file 0 15:9 -> 15:75, #1 +Counter in file 0 15:9 -> 15:75, #1 +Counter in file 0 15:9 -> 15:75, #1 +Counter in file 0 47:13 -> 56:54, #1 +Counter in file 0 59:32 -> 59:35, ((#1 + #2) - #2) +Counter in file 0 59:39 -> 59:73, (#1 + #2) +Counter in file 0 60:23 -> 60:26, (((#1 + #2) - #2) + 0) +Counter in file 0 62:10 -> 62:11, #2 +Counter in file 0 63:5 -> 63:6, (((#1 + #2) - #2) + 0) +Counter in file 0 53:17 -> 53:19, #1 +Counter in file 0 30:1 -> 30:2, #1 +Counter in file 0 5:24 -> 5:25, #1 +Counter in file 0 14:1 -> 14:2, #1 +Counter in file 0 5:22 -> 5:25, #1 +Counter in file 0 25:19 -> 26:12, #1 +Counter in file 0 27:9 -> 27:10, #3 +Counter in file 0 27:14 -> 27:17, (#1 + 0) +Counter in file 0 27:27 -> 27:32, #2 +Counter in file 0 27:32 -> 27:33, (#2 - #3) +Counter in file 0 27:36 -> 27:38, (#3 + 0) +Counter in file 0 28:14 -> 28:16, #4 +Counter in file 0 30:1 -> 30:2, (#3 + #4) +Counter in file 0 23:1 -> 23:2, #1 +Counter in file 0 32:11 -> 37:2, #1 +Emitting segments for file: ../coverage/async.rs +Combined regions: + 5:22 -> 5:25 (count=1) + 5:24 -> 5:25 (count=1) + 14:1 -> 14:2 (count=1) + 23:1 -> 23:2 (count=1) + 25:19 -> 26:12 (count=1) + 27:9 -> 27:10 (count=0) + 27:14 -> 27:17 (count=1) + 27:27 -> 27:32 (count=1) + 27:32 -> 27:33 (count=1) + 27:36 -> 27:38 (count=0) + 28:14 -> 28:16 (count=1) + 30:1 -> 30:2 (count=2) + 32:11 -> 37:2 (count=1) + 47:13 -> 56:54 (count=1) + 53:17 -> 53:19 (count=1) + 59:32 -> 59:35 (count=1) + 59:39 -> 59:73 (count=1) + 60:23 -> 60:26 (count=1) + 62:10 -> 62:11 (count=0) + 63:5 -> 63:6 (count=1) +Segment at 5:22 (count = 1), RegionEntry +Segment at 5:24 (count = 1), RegionEntry +Segment at 5:25 (count = 0), Skipped +Segment at 14:1 (count = 1), RegionEntry +Segment at 14:2 (count = 0), Skipped +Segment at 23:1 (count = 1), RegionEntry +Segment at 23:2 (count = 0), Skipped +Segment at 25:19 (count = 1), RegionEntry +Segment at 26:12 (count = 0), Skipped +Segment at 27:9 (count = 0), RegionEntry +Segment at 27:10 (count = 0), Skipped +Segment at 27:14 (count = 1), RegionEntry +Segment at 27:17 (count = 0), Skipped +Segment at 27:27 (count = 1), RegionEntry +Segment at 27:32 (count = 1), RegionEntry +Segment at 27:33 (count = 0), Skipped +Segment at 27:36 (count = 0), RegionEntry +Segment at 27:38 (count = 0), Skipped +Segment at 28:14 (count = 1), RegionEntry +Segment at 28:16 (count = 0), Skipped +Segment at 30:1 (count = 2), RegionEntry +Segment at 30:2 (count = 0), Skipped +Segment at 32:11 (count = 1), RegionEntry +Segment at 37:2 (count = 0), Skipped +Segment at 47:13 (count = 1), RegionEntry +Segment at 53:17 (count = 1), RegionEntry +Segment at 53:19 (count = 1) +Segment at 56:54 (count = 0), Skipped +Segment at 59:32 (count = 1), RegionEntry +Segment at 59:35 (count = 0), Skipped +Segment at 59:39 (count = 1), RegionEntry +Segment at 59:73 (count = 0), Skipped +Segment at 60:23 (count = 1), RegionEntry +Segment at 60:26 (count = 0), Skipped +Segment at 62:10 (count = 0), RegionEntry +Segment at 62:11 (count = 0), Skipped +Segment at 63:5 (count = 1), RegionEntry +Segment at 63:6 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.conditions.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.conditions.txt index d48cd8074bebb..a4c1a9c0f121a 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.conditions.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.conditions.txt @@ -1,72 +1,91 @@ Counter in file 0 4:9 -> 4:26, #1 Counter in file 0 5:8 -> 5:12, (#1 + 0) Counter in file 0 5:13 -> 7:6, #2 -Counter in file 0 10:9 -> 10:10, (#4 + #11) +Counter in file 0 10:9 -> 10:10, (#3 + (#12 + #13)) Counter in file 0 10:16 -> 10:29, (#2 + 0) -Counter in file 0 11:9 -> 12:10, #4 +Counter in file 0 11:9 -> 12:10, #3 Counter in file 0 13:15 -> 13:28, ((#2 + 0) - #3) -Counter in file 0 14:12 -> 14:25, #5 -Counter in file 0 14:29 -> 14:42, (#5 - #13) -Counter in file 0 14:42 -> 14:43, (#13 + #14) -Counter in file 0 14:42 -> 14:43, ((#5 - #13) - #14) -Counter in file 0 14:46 -> 14:60, #21 -Counter in file 0 14:60 -> 14:61, (#17 + #18) -Counter in file 0 14:60 -> 14:61, (#21 - #18) -Counter in file 0 14:61 -> 16:10, #22 -Counter in file 0 16:10 -> 16:11, #23 -Counter in file 0 17:9 -> 18:18, #11 -Counter in file 0 20:9 -> 20:15, (((#2 + 0) - #3) - #5) -Counter in file 0 23:9 -> 23:26, ((#4 + #11) + 0) -Counter in file 0 24:8 -> 24:12, ((#4 + #11) + 0) -Counter in file 0 24:13 -> 26:6, #12 -Counter in file 0 28:8 -> 28:21, (#12 + 0) -Counter in file 0 29:9 -> 29:23, #16 -Counter in file 0 30:15 -> 30:28, ((#12 + 0) - #15) -Counter in file 0 31:12 -> 31:25, (((#12 + 0) - #15) - #8) -Counter in file 0 31:29 -> 31:42, ((((#12 + 0) - #15) - #8) - #24) -Counter in file 0 31:42 -> 31:43, (((((#12 + 0) - #15) - #8) - #24) - #25) +Counter in file 0 14:12 -> 14:25, #4 +Counter in file 0 14:29 -> 14:42, (#4 - #15) +Counter in file 0 14:42 -> 14:43, ((#4 - #15) - #16) +Counter in file 0 14:42 -> 14:43, (#15 + #16) +Counter in file 0 14:46 -> 14:60, #23 +Counter in file 0 14:60 -> 14:61, (#18 + #19) +Counter in file 0 14:60 -> 14:61, (#23 - #19) +Counter in file 0 14:61 -> 16:10, #12 +Counter in file 0 16:10 -> 16:11, #13 +Counter in file 0 17:9 -> 18:18, (#12 + #13) +Counter in file 0 20:9 -> 20:15, (((#2 + 0) - #3) - #4) +Counter in file 0 23:9 -> 23:26, ((#3 + (#12 + #13)) + 0) +Counter in file 0 24:8 -> 24:12, ((#3 + (#12 + #13)) + 0) +Counter in file 0 24:13 -> 26:6, #14 +Counter in file 0 28:8 -> 28:21, (#14 + 0) +Counter in file 0 28:22 -> 30:6, #17 +Counter in file 0 30:15 -> 30:28, ((#14 + 0) - #17) +Counter in file 0 31:12 -> 31:25, (((#14 + 0) - #17) - #8) +Counter in file 0 31:29 -> 31:42, ((((#14 + 0) - #17) - #8) - #24) +Counter in file 0 31:42 -> 31:43, (((((#14 + 0) - #17) - #8) - #24) - #25) Counter in file 0 31:42 -> 31:43, (#24 + #25) -Counter in file 0 31:46 -> 31:60, #32 -Counter in file 0 31:60 -> 31:61, (#28 + #29) -Counter in file 0 31:60 -> 31:61, (#32 - #29) -Counter in file 0 31:61 -> 33:10, #33 -Counter in file 0 33:10 -> 33:11, #34 -Counter in file 0 34:9 -> 34:23, #19 +Counter in file 0 31:46 -> 31:60, #34 +Counter in file 0 31:60 -> 31:61, (#34 - #32) +Counter in file 0 31:60 -> 31:61, (#31 + #32) +Counter in file 0 31:61 -> 33:10, #20 +Counter in file 0 33:10 -> 33:11, #21 +Counter in file 0 34:9 -> 34:23, (#20 + #21) Counter in file 0 36:9 -> 36:15, #8 -Counter in file 0 39:9 -> 39:26, (#16 + #19) -Counter in file 0 40:8 -> 40:12, ((#16 + #19) + 0) -Counter in file 0 40:13 -> 42:6, #20 -Counter in file 0 44:9 -> 44:10, (#27 + #30) -Counter in file 0 44:16 -> 44:29, (#20 + 0) -Counter in file 0 45:9 -> 45:23, #27 -Counter in file 0 46:15 -> 46:28, ((#20 + 0) - #26) -Counter in file 0 47:12 -> 47:25, (((#20 + 0) - #26) - #7) -Counter in file 0 47:29 -> 47:42, ((((#20 + 0) - #26) - #7) - #35) -Counter in file 0 47:42 -> 47:43, (#35 + #36) -Counter in file 0 47:42 -> 47:43, (((((#20 + 0) - #26) - #7) - #35) - #36) -Counter in file 0 47:46 -> 47:60, #41 -Counter in file 0 47:60 -> 47:61, (#37 + #38) -Counter in file 0 47:60 -> 47:61, (#41 - #38) -Counter in file 0 47:61 -> 49:10, #42 -Counter in file 0 49:10 -> 49:11, #43 -Counter in file 0 50:9 -> 50:23, #30 -Counter in file 0 52:13 -> 54:15, #7 -Counter in file 0 57:9 -> 57:10, (#9 + #10) -Counter in file 0 57:16 -> 57:29, ((#27 + #30) + 0) -Counter in file 0 58:9 -> 58:23, #9 -Counter in file 0 59:15 -> 59:28, ((#27 + #30) - #31) -Counter in file 0 60:12 -> 60:25, (((#27 + #30) - #31) - #6) -Counter in file 0 60:29 -> 60:42, ((((#27 + #30) - #31) - #6) - #39) -Counter in file 0 60:42 -> 60:43, (#39 + #40) -Counter in file 0 60:42 -> 60:43, (((((#27 + #30) - #31) - #6) - #39) - #40) -Counter in file 0 60:46 -> 60:60, #46 -Counter in file 0 60:60 -> 60:61, (#46 - #45) -Counter in file 0 60:60 -> 60:61, (#44 + #45) -Counter in file 0 60:61 -> 62:10, #47 -Counter in file 0 62:10 -> 62:11, #48 -Counter in file 0 63:9 -> 63:23, #10 -Counter in file 0 65:9 -> 65:15, #6 -Counter in file 0 67:1 -> 67:2, ((#9 + #10) + (((#6 + #7) + #8) + (((#2 + 0) - #3) - #5))) +Counter in file 0 39:8 -> 39:12, (#17 + (#20 + #21)) +Counter in file 0 52:13 -> 52:30, #22 +Counter in file 0 53:12 -> 53:16, (#22 + 0) +Counter in file 0 53:17 -> 55:10, #26 +Counter in file 0 57:12 -> 57:25, (#26 + 0) +Counter in file 0 57:26 -> 59:10, #27 +Counter in file 0 65:17 -> 65:30, ((#26 + 0) - #27) +Counter in file 0 66:16 -> 66:29, (((#26 + 0) - #27) - #7) +Counter in file 0 66:33 -> 66:46, ((((#26 + 0) - #27) - #7) - #37) +Counter in file 0 66:46 -> 66:47, (#37 + #38) +Counter in file 0 66:46 -> 66:47, (((((#26 + 0) - #27) - #7) - #37) - #38) +Counter in file 0 66:50 -> 66:64, #47 +Counter in file 0 66:64 -> 66:65, (#47 - #42) +Counter in file 0 66:64 -> 66:65, (#41 + #42) +Counter in file 0 66:65 -> 68:14, #28 +Counter in file 0 68:14 -> 68:15, #29 +Counter in file 0 69:13 -> 69:27, (#28 + #29) +Counter in file 0 71:13 -> 71:19, #7 +Counter in file 0 73:6 -> 73:7, (#27 + (#28 + #29)) +Counter in file 0 75:9 -> 75:26, ((#27 + (#28 + #29)) + 0) +Counter in file 0 76:8 -> 76:12, (((#27 + (#28 + #29)) + 0) + 0) +Counter in file 0 76:13 -> 78:6, #30 +Counter in file 0 80:9 -> 80:10, (#33 + (#35 + #36)) +Counter in file 0 80:16 -> 80:29, (#30 + 0) +Counter in file 0 80:30 -> 82:6, #33 +Counter in file 0 82:15 -> 82:28, ((#30 + 0) - #33) +Counter in file 0 83:12 -> 83:25, (((#30 + 0) - #33) - #6) +Counter in file 0 83:29 -> 83:42, ((((#30 + 0) - #33) - #6) - #39) +Counter in file 0 83:42 -> 83:43, (#39 + #40) +Counter in file 0 83:42 -> 83:43, (((((#30 + 0) - #33) - #6) - #39) - #40) +Counter in file 0 83:46 -> 83:60, #48 +Counter in file 0 83:60 -> 83:61, (#43 + #44) +Counter in file 0 83:60 -> 83:61, (#48 - #44) +Counter in file 0 83:61 -> 85:10, #35 +Counter in file 0 85:10 -> 85:11, #36 +Counter in file 0 86:9 -> 86:23, (#35 + #36) +Counter in file 0 88:13 -> 90:15, #6 +Counter in file 0 93:9 -> 93:10, (#9 + (#10 + #11)) +Counter in file 0 93:16 -> 93:29, ((#33 + (#35 + #36)) + 0) +Counter in file 0 93:30 -> 95:6, #9 +Counter in file 0 95:15 -> 95:28, ((#33 + (#35 + #36)) - #9) +Counter in file 0 96:12 -> 96:25, (((#33 + (#35 + #36)) - #9) - #5) +Counter in file 0 96:29 -> 96:42, ((((#33 + (#35 + #36)) - #9) - #5) - #45) +Counter in file 0 96:42 -> 96:43, (#45 + #46) +Counter in file 0 96:42 -> 96:43, (((((#33 + (#35 + #36)) - #9) - #5) - #45) - #46) +Counter in file 0 96:46 -> 96:60, #51 +Counter in file 0 96:60 -> 96:61, (#49 + #50) +Counter in file 0 96:60 -> 96:61, (#51 - #50) +Counter in file 0 96:61 -> 98:10, #10 +Counter in file 0 98:10 -> 98:11, #11 +Counter in file 0 99:9 -> 99:23, (#10 + #11) +Counter in file 0 101:9 -> 101:15, #5 +Counter in file 0 103:1 -> 103:2, ((#9 + (#10 + #11)) + (((#5 + #6) + (#7 + #8)) + (((#2 + 0) - #3) - #4))) Emitting segments for file: ../coverage/conditions.rs Combined regions: 4:9 -> 4:26 (count=1) @@ -89,7 +108,7 @@ Combined regions: 24:8 -> 24:12 (count=1) 24:13 -> 26:6 (count=1) 28:8 -> 28:21 (count=1) - 29:9 -> 29:23 (count=1) + 28:22 -> 30:6 (count=1) 30:15 -> 30:28 (count=0) 31:12 -> 31:25 (count=0) 31:29 -> 31:42 (count=0) @@ -100,36 +119,53 @@ Combined regions: 33:10 -> 33:11 (count=0) 34:9 -> 34:23 (count=0) 36:9 -> 36:15 (count=0) - 39:9 -> 39:26 (count=1) - 40:8 -> 40:12 (count=1) - 40:13 -> 42:6 (count=1) - 44:9 -> 44:10 (count=0) - 44:16 -> 44:29 (count=1) - 45:9 -> 45:23 (count=0) - 46:15 -> 46:28 (count=1) - 47:12 -> 47:25 (count=0) - 47:29 -> 47:42 (count=0) - 47:42 -> 47:43 (count=0) - 47:46 -> 47:60 (count=0) - 47:60 -> 47:61 (count=0) - 47:61 -> 49:10 (count=0) - 49:10 -> 49:11 (count=0) - 50:9 -> 50:23 (count=0) - 52:13 -> 54:15 (count=1) - 57:9 -> 57:10 (count=0) - 57:16 -> 57:29 (count=0) - 58:9 -> 58:23 (count=0) - 59:15 -> 59:28 (count=0) - 60:12 -> 60:25 (count=0) - 60:29 -> 60:42 (count=0) - 60:42 -> 60:43 (count=0) - 60:46 -> 60:60 (count=0) - 60:60 -> 60:61 (count=0) - 60:61 -> 62:10 (count=0) - 62:10 -> 62:11 (count=0) - 63:9 -> 63:23 (count=0) - 65:9 -> 65:15 (count=0) - 67:1 -> 67:2 (count=1) + 39:8 -> 39:12 (count=1) + 52:13 -> 52:30 (count=1) + 53:12 -> 53:16 (count=1) + 53:17 -> 55:10 (count=1) + 57:12 -> 57:25 (count=1) + 57:26 -> 59:10 (count=1) + 65:17 -> 65:30 (count=0) + 66:16 -> 66:29 (count=0) + 66:33 -> 66:46 (count=0) + 66:46 -> 66:47 (count=0) + 66:50 -> 66:64 (count=0) + 66:64 -> 66:65 (count=0) + 66:65 -> 68:14 (count=0) + 68:14 -> 68:15 (count=0) + 69:13 -> 69:27 (count=0) + 71:13 -> 71:19 (count=0) + 73:6 -> 73:7 (count=1) + 75:9 -> 75:26 (count=1) + 76:8 -> 76:12 (count=1) + 76:13 -> 78:6 (count=1) + 80:9 -> 80:10 (count=0) + 80:16 -> 80:29 (count=1) + 80:30 -> 82:6 (count=0) + 82:15 -> 82:28 (count=1) + 83:12 -> 83:25 (count=0) + 83:29 -> 83:42 (count=0) + 83:42 -> 83:43 (count=0) + 83:46 -> 83:60 (count=0) + 83:60 -> 83:61 (count=0) + 83:61 -> 85:10 (count=0) + 85:10 -> 85:11 (count=0) + 86:9 -> 86:23 (count=0) + 88:13 -> 90:15 (count=1) + 93:9 -> 93:10 (count=0) + 93:16 -> 93:29 (count=0) + 93:30 -> 95:6 (count=0) + 95:15 -> 95:28 (count=0) + 96:12 -> 96:25 (count=0) + 96:29 -> 96:42 (count=0) + 96:42 -> 96:43 (count=0) + 96:46 -> 96:60 (count=0) + 96:60 -> 96:61 (count=0) + 96:61 -> 98:10 (count=0) + 98:10 -> 98:11 (count=0) + 99:9 -> 99:23 (count=0) + 101:9 -> 101:15 (count=0) + 103:1 -> 103:2 (count=1) Segment at 4:9 (count = 1), RegionEntry Segment at 4:26 (count = 0), Skipped Segment at 5:8 (count = 1), RegionEntry @@ -166,8 +202,8 @@ Segment at 24:13 (count = 1), RegionEntry Segment at 26:6 (count = 0), Skipped Segment at 28:8 (count = 1), RegionEntry Segment at 28:21 (count = 0), Skipped -Segment at 29:9 (count = 1), RegionEntry -Segment at 29:23 (count = 0), Skipped +Segment at 28:22 (count = 1), RegionEntry +Segment at 30:6 (count = 0), Skipped Segment at 30:15 (count = 0), RegionEntry Segment at 30:28 (count = 0), Skipped Segment at 31:12 (count = 0), RegionEntry @@ -184,55 +220,85 @@ Segment at 34:9 (count = 0), RegionEntry Segment at 34:23 (count = 0), Skipped Segment at 36:9 (count = 0), RegionEntry Segment at 36:15 (count = 0), Skipped -Segment at 39:9 (count = 1), RegionEntry -Segment at 39:26 (count = 0), Skipped -Segment at 40:8 (count = 1), RegionEntry -Segment at 40:12 (count = 0), Skipped -Segment at 40:13 (count = 1), RegionEntry -Segment at 42:6 (count = 0), Skipped -Segment at 44:9 (count = 0), RegionEntry -Segment at 44:10 (count = 0), Skipped -Segment at 44:16 (count = 1), RegionEntry -Segment at 44:29 (count = 0), Skipped -Segment at 45:9 (count = 0), RegionEntry -Segment at 45:23 (count = 0), Skipped -Segment at 46:15 (count = 1), RegionEntry -Segment at 46:28 (count = 0), Skipped -Segment at 47:12 (count = 0), RegionEntry -Segment at 47:25 (count = 0), Skipped -Segment at 47:29 (count = 0), RegionEntry -Segment at 47:42 (count = 0), RegionEntry -Segment at 47:43 (count = 0), Skipped -Segment at 47:46 (count = 0), RegionEntry -Segment at 47:60 (count = 0), RegionEntry -Segment at 47:61 (count = 0), RegionEntry -Segment at 49:10 (count = 0), RegionEntry -Segment at 49:11 (count = 0), Skipped -Segment at 50:9 (count = 0), RegionEntry -Segment at 50:23 (count = 0), Skipped +Segment at 39:8 (count = 1), RegionEntry +Segment at 39:12 (count = 0), Skipped Segment at 52:13 (count = 1), RegionEntry -Segment at 54:15 (count = 0), Skipped -Segment at 57:9 (count = 0), RegionEntry -Segment at 57:10 (count = 0), Skipped -Segment at 57:16 (count = 0), RegionEntry -Segment at 57:29 (count = 0), Skipped -Segment at 58:9 (count = 0), RegionEntry -Segment at 58:23 (count = 0), Skipped -Segment at 59:15 (count = 0), RegionEntry -Segment at 59:28 (count = 0), Skipped -Segment at 60:12 (count = 0), RegionEntry -Segment at 60:25 (count = 0), Skipped -Segment at 60:29 (count = 0), RegionEntry -Segment at 60:42 (count = 0), RegionEntry -Segment at 60:43 (count = 0), Skipped -Segment at 60:46 (count = 0), RegionEntry -Segment at 60:60 (count = 0), RegionEntry -Segment at 60:61 (count = 0), RegionEntry -Segment at 62:10 (count = 0), RegionEntry -Segment at 62:11 (count = 0), Skipped -Segment at 63:9 (count = 0), RegionEntry -Segment at 63:23 (count = 0), Skipped -Segment at 65:9 (count = 0), RegionEntry -Segment at 65:15 (count = 0), Skipped -Segment at 67:1 (count = 1), RegionEntry -Segment at 67:2 (count = 0), Skipped +Segment at 52:30 (count = 0), Skipped +Segment at 53:12 (count = 1), RegionEntry +Segment at 53:16 (count = 0), Skipped +Segment at 53:17 (count = 1), RegionEntry +Segment at 55:10 (count = 0), Skipped +Segment at 57:12 (count = 1), RegionEntry +Segment at 57:25 (count = 0), Skipped +Segment at 57:26 (count = 1), RegionEntry +Segment at 59:10 (count = 0), Skipped +Segment at 65:17 (count = 0), RegionEntry +Segment at 65:30 (count = 0), Skipped +Segment at 66:16 (count = 0), RegionEntry +Segment at 66:29 (count = 0), Skipped +Segment at 66:33 (count = 0), RegionEntry +Segment at 66:46 (count = 0), RegionEntry +Segment at 66:47 (count = 0), Skipped +Segment at 66:50 (count = 0), RegionEntry +Segment at 66:64 (count = 0), RegionEntry +Segment at 66:65 (count = 0), RegionEntry +Segment at 68:14 (count = 0), RegionEntry +Segment at 68:15 (count = 0), Skipped +Segment at 69:13 (count = 0), RegionEntry +Segment at 69:27 (count = 0), Skipped +Segment at 71:13 (count = 0), RegionEntry +Segment at 71:19 (count = 0), Skipped +Segment at 73:6 (count = 1), RegionEntry +Segment at 73:7 (count = 0), Skipped +Segment at 75:9 (count = 1), RegionEntry +Segment at 75:26 (count = 0), Skipped +Segment at 76:8 (count = 1), RegionEntry +Segment at 76:12 (count = 0), Skipped +Segment at 76:13 (count = 1), RegionEntry +Segment at 78:6 (count = 0), Skipped +Segment at 80:9 (count = 0), RegionEntry +Segment at 80:10 (count = 0), Skipped +Segment at 80:16 (count = 1), RegionEntry +Segment at 80:29 (count = 0), Skipped +Segment at 80:30 (count = 0), RegionEntry +Segment at 82:6 (count = 0), Skipped +Segment at 82:15 (count = 1), RegionEntry +Segment at 82:28 (count = 0), Skipped +Segment at 83:12 (count = 0), RegionEntry +Segment at 83:25 (count = 0), Skipped +Segment at 83:29 (count = 0), RegionEntry +Segment at 83:42 (count = 0), RegionEntry +Segment at 83:43 (count = 0), Skipped +Segment at 83:46 (count = 0), RegionEntry +Segment at 83:60 (count = 0), RegionEntry +Segment at 83:61 (count = 0), RegionEntry +Segment at 85:10 (count = 0), RegionEntry +Segment at 85:11 (count = 0), Skipped +Segment at 86:9 (count = 0), RegionEntry +Segment at 86:23 (count = 0), Skipped +Segment at 88:13 (count = 1), RegionEntry +Segment at 90:15 (count = 0), Skipped +Segment at 93:9 (count = 0), RegionEntry +Segment at 93:10 (count = 0), Skipped +Segment at 93:16 (count = 0), RegionEntry +Segment at 93:29 (count = 0), Skipped +Segment at 93:30 (count = 0), RegionEntry +Segment at 95:6 (count = 0), Skipped +Segment at 95:15 (count = 0), RegionEntry +Segment at 95:28 (count = 0), Skipped +Segment at 96:12 (count = 0), RegionEntry +Segment at 96:25 (count = 0), Skipped +Segment at 96:29 (count = 0), RegionEntry +Segment at 96:42 (count = 0), RegionEntry +Segment at 96:43 (count = 0), Skipped +Segment at 96:46 (count = 0), RegionEntry +Segment at 96:60 (count = 0), RegionEntry +Segment at 96:61 (count = 0), RegionEntry +Segment at 98:10 (count = 0), RegionEntry +Segment at 98:11 (count = 0), Skipped +Segment at 99:9 (count = 0), RegionEntry +Segment at 99:23 (count = 0), Skipped +Segment at 101:9 (count = 0), RegionEntry +Segment at 101:15 (count = 0), Skipped +Segment at 103:1 (count = 1), RegionEntry +Segment at 103:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.inner_items.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.inner_items.txt index 65cd6481af4cc..e4dfae7681783 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.inner_items.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.inner_items.txt @@ -1,7 +1,4 @@ -Counter in file 0 19:13 -> 19:18, #1 -Counter in file 0 20:13 -> 20:14, #2 -Counter in file 0 20:17 -> 20:22, (#1 + 0) -Counter in file 0 21:9 -> 22:6, (#2 + 0) +Counter in file 0 19:13 -> 22:6, #1 Counter in file 0 7:9 -> 9:26, #1 Counter in file 0 10:8 -> 10:15, (#1 + 0) Counter in file 0 10:16 -> 12:6, #2 @@ -11,21 +8,16 @@ Counter in file 0 48:16 -> 50:6, #3 Counter in file 0 50:6 -> 50:7, ((#2 + (#1 - #2)) - #3) Counter in file 0 52:9 -> 57:2, (#3 + ((#2 + (#1 - #2)) - #3)) Counter in file 0 33:42 -> 36:10, #1 -Counter in file 0 41:37 -> 41:41, #1 -Counter in file 0 42:13 -> 43:10, #2 +Counter in file 0 40:45 -> 43:10, #1 Emitting segments for file: ../coverage/inner_items.rs Combined regions: 7:9 -> 9:26 (count=1) 10:8 -> 10:15 (count=1) 10:16 -> 12:6 (count=1) 12:6 -> 12:7 (count=0) - 19:13 -> 19:18 (count=3) - 20:13 -> 20:14 (count=3) - 20:17 -> 20:22 (count=3) - 21:9 -> 22:6 (count=3) + 19:13 -> 22:6 (count=3) 33:42 -> 36:10 (count=1) - 41:37 -> 41:41 (count=1) - 42:13 -> 43:10 (count=1) + 40:45 -> 43:10 (count=1) 48:8 -> 48:15 (count=1) 48:16 -> 50:6 (count=1) 50:6 -> 50:7 (count=0) @@ -38,18 +30,10 @@ Segment at 10:16 (count = 1), RegionEntry Segment at 12:6 (count = 0), RegionEntry Segment at 12:7 (count = 0), Skipped Segment at 19:13 (count = 3), RegionEntry -Segment at 19:18 (count = 0), Skipped -Segment at 20:13 (count = 3), RegionEntry -Segment at 20:14 (count = 0), Skipped -Segment at 20:17 (count = 3), RegionEntry -Segment at 20:22 (count = 0), Skipped -Segment at 21:9 (count = 3), RegionEntry Segment at 22:6 (count = 0), Skipped Segment at 33:42 (count = 1), RegionEntry Segment at 36:10 (count = 0), Skipped -Segment at 41:37 (count = 1), RegionEntry -Segment at 41:41 (count = 0), Skipped -Segment at 42:13 (count = 1), RegionEntry +Segment at 40:45 (count = 1), RegionEntry Segment at 43:10 (count = 0), Skipped Segment at 48:8 (count = 1), RegionEntry Segment at 48:15 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.nested_loops.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.nested_loops.txt index f503007353319..f8e504c56c48e 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.nested_loops.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.nested_loops.txt @@ -1,21 +1,20 @@ Counter in file 0 2:9 -> 3:27, #1 -Counter in file 0 5:19 -> 5:32, (#1 + #2) -Counter in file 0 6:13 -> 7:24, ((#1 + #2) - #3) -Counter in file 0 8:13 -> 8:14, ((((#1 + #2) - #3) + (#5 + #6)) - #7) -Counter in file 0 8:18 -> 8:23, (((#1 + #2) - #3) + (#5 + #6)) -Counter in file 0 9:16 -> 9:22, (((((#1 + #2) - #3) + (#5 + #6)) - #7) + 0) -Counter in file 0 10:17 -> 10:22, #8 -Counter in file 0 12:13 -> 12:19, #9 -Counter in file 0 13:13 -> 13:19, #10 -Counter in file 0 14:16 -> 14:22, (#10 + 0) -Counter in file 0 15:17 -> 16:27, #11 -Counter in file 0 17:21 -> 17:33, #4 -Counter in file 0 19:21 -> 21:14, #5 -Counter in file 0 21:14 -> 21:15, #6 -Counter in file 0 22:10 -> 22:11, (#5 + #6) -Counter in file 0 23:9 -> 23:23, #2 -Counter in file 0 24:6 -> 24:7, #3 -Counter in file 0 25:1 -> 25:2, (#4 + #3) +Counter in file 0 5:19 -> 5:32, (#1 + (#2 + #3)) +Counter in file 0 6:13 -> 7:24, ((#1 + (#2 + #3)) - #4) +Counter in file 0 8:13 -> 8:14, ((((#1 + (#2 + #3)) - #4) + (#6 + #7)) - #3) +Counter in file 0 8:18 -> 8:23, (((#1 + (#2 + #3)) - #4) + (#6 + #7)) +Counter in file 0 9:16 -> 9:22, (((((#1 + (#2 + #3)) - #4) + (#6 + #7)) - #3) + 0) +Counter in file 0 10:17 -> 10:22, #2 +Counter in file 0 12:13 -> 13:19, (((((#1 + (#2 + #3)) - #4) + (#6 + #7)) - #3) - #2) +Counter in file 0 14:16 -> 14:22, ((((((#1 + (#2 + #3)) - #4) + (#6 + #7)) - #3) - #2) + 0) +Counter in file 0 15:17 -> 16:27, ((((((#1 + (#2 + #3)) - #4) + (#6 + #7)) - #3) - #2) - #7) +Counter in file 0 17:21 -> 17:33, #5 +Counter in file 0 18:24 -> 21:14, #6 +Counter in file 0 21:14 -> 21:15, #7 +Counter in file 0 22:10 -> 22:11, (#6 + #7) +Counter in file 0 23:9 -> 23:23, (#2 + #3) +Counter in file 0 24:6 -> 24:7, #4 +Counter in file 0 25:1 -> 25:2, (#5 + #4) Emitting segments for file: ../coverage/nested_loops.rs Combined regions: 2:9 -> 3:27 (count=1) @@ -25,12 +24,11 @@ Combined regions: 8:18 -> 8:23 (count=3) 9:16 -> 9:22 (count=3) 10:17 -> 10:22 (count=0) - 12:13 -> 12:19 (count=3) - 13:13 -> 13:19 (count=3) + 12:13 -> 13:19 (count=3) 14:16 -> 14:22 (count=3) 15:17 -> 16:27 (count=1) 17:21 -> 17:33 (count=1) - 19:21 -> 21:14 (count=0) + 18:24 -> 21:14 (count=0) 21:14 -> 21:15 (count=2) 22:10 -> 22:11 (count=2) 23:9 -> 23:23 (count=0) @@ -51,8 +49,6 @@ Segment at 9:22 (count = 0), Skipped Segment at 10:17 (count = 0), RegionEntry Segment at 10:22 (count = 0), Skipped Segment at 12:13 (count = 3), RegionEntry -Segment at 12:19 (count = 0), Skipped -Segment at 13:13 (count = 3), RegionEntry Segment at 13:19 (count = 0), Skipped Segment at 14:16 (count = 3), RegionEntry Segment at 14:22 (count = 0), Skipped @@ -60,7 +56,7 @@ Segment at 15:17 (count = 1), RegionEntry Segment at 16:27 (count = 0), Skipped Segment at 17:21 (count = 1), RegionEntry Segment at 17:33 (count = 0), Skipped -Segment at 19:21 (count = 0), RegionEntry +Segment at 18:24 (count = 0), RegionEntry Segment at 21:14 (count = 2), RegionEntry Segment at 21:15 (count = 0), Skipped Segment at 22:10 (count = 2), RegionEntry diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.overflow.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.overflow.txt new file mode 100644 index 0000000000000..8696e102b568e --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.overflow.txt @@ -0,0 +1,53 @@ +Counter in file 0 16:9 -> 16:27, #1 +Counter in file 0 17:11 -> 17:24, (#1 + (#2 + (#3 + #4))) +Counter in file 0 18:12 -> 18:26, ((#1 + (#2 + (#3 + #4))) - #5) +Counter in file 0 18:27 -> 21:10, #2 +Counter in file 0 21:19 -> 21:32, (((#1 + (#2 + (#3 + #4))) - #5) - #2) +Counter in file 0 21:33 -> 24:10, #3 +Counter in file 0 24:10 -> 24:11, #4 +Counter in file 0 24:10 -> 24:11, (#3 + #4) +Counter in file 0 25:9 -> 25:23, (#2 + (#3 + #4)) +Counter in file 0 27:5 -> 28:2, #5 +Counter in file 0 5:8 -> 5:18, #1 +Counter in file 0 5:19 -> 7:6, #2 +Counter in file 0 7:6 -> 7:7, (#1 - #2) +Counter in file 0 8:9 -> 13:2, (#2 + (#1 - #2)) +Emitting segments for file: ../coverage/overflow.rs +Combined regions: + 5:8 -> 5:18 (count=4) + 5:19 -> 7:6 (count=1) + 7:6 -> 7:7 (count=3) + 8:9 -> 13:2 (count=4) + 16:9 -> 16:27 (count=1) + 17:11 -> 17:24 (count=10) + 18:12 -> 18:26 (count=10) + 18:27 -> 21:10 (count=0) + 21:19 -> 21:32 (count=10) + 21:33 -> 24:10 (count=3) + 24:10 -> 24:11 (count=15) + 25:9 -> 25:23 (count=9) + 27:5 -> 28:2 (count=0) +Segment at 5:8 (count = 4), RegionEntry +Segment at 5:18 (count = 0), Skipped +Segment at 5:19 (count = 1), RegionEntry +Segment at 7:6 (count = 3), RegionEntry +Segment at 7:7 (count = 0), Skipped +Segment at 8:9 (count = 4), RegionEntry +Segment at 13:2 (count = 0), Skipped +Segment at 16:9 (count = 1), RegionEntry +Segment at 16:27 (count = 0), Skipped +Segment at 17:11 (count = 10), RegionEntry +Segment at 17:24 (count = 0), Skipped +Segment at 18:12 (count = 10), RegionEntry +Segment at 18:26 (count = 0), Skipped +Segment at 18:27 (count = 0), RegionEntry +Segment at 21:10 (count = 0), Skipped +Segment at 21:19 (count = 10), RegionEntry +Segment at 21:32 (count = 0), Skipped +Segment at 21:33 (count = 3), RegionEntry +Segment at 24:10 (count = 15), RegionEntry +Segment at 24:11 (count = 0), Skipped +Segment at 25:9 (count = 9), RegionEntry +Segment at 25:23 (count = 0), Skipped +Segment at 27:5 (count = 0), RegionEntry +Segment at 28:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.panic_unwind.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.panic_unwind.txt new file mode 100644 index 0000000000000..9602ff1a985aa --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.panic_unwind.txt @@ -0,0 +1,50 @@ +Counter in file 0 14:9 -> 14:27, #1 +Counter in file 0 15:11 -> 15:24, (#1 + (#2 + (#3 + #4))) +Counter in file 0 16:12 -> 16:26, ((#1 + (#2 + (#3 + #4))) - #5) +Counter in file 0 16:27 -> 18:10, #2 +Counter in file 0 18:19 -> 18:32, (((#1 + (#2 + (#3 + #4))) - #5) - #2) +Counter in file 0 18:33 -> 20:10, #3 +Counter in file 0 20:10 -> 20:11, #4 +Counter in file 0 20:10 -> 20:11, (#3 + #4) +Counter in file 0 21:9 -> 21:23, (#2 + (#3 + #4)) +Counter in file 0 23:5 -> 24:2, #5 +Counter in file 0 5:8 -> 5:20, #1 +Counter in file 0 6:9 -> 7:26, #2 +Counter in file 0 8:12 -> 11:2, (#1 - #2) +Emitting segments for file: ../coverage/panic_unwind.rs +Combined regions: + 5:8 -> 5:20 (count=4) + 6:9 -> 7:26 (count=1) + 8:12 -> 11:2 (count=3) + 14:9 -> 14:27 (count=1) + 15:11 -> 15:24 (count=10) + 16:12 -> 16:26 (count=10) + 16:27 -> 18:10 (count=0) + 18:19 -> 18:32 (count=10) + 18:33 -> 20:10 (count=3) + 20:10 -> 20:11 (count=15) + 21:9 -> 21:23 (count=9) + 23:5 -> 24:2 (count=0) +Segment at 5:8 (count = 4), RegionEntry +Segment at 5:20 (count = 0), Skipped +Segment at 6:9 (count = 1), RegionEntry +Segment at 7:26 (count = 0), Skipped +Segment at 8:12 (count = 3), RegionEntry +Segment at 11:2 (count = 0), Skipped +Segment at 14:9 (count = 1), RegionEntry +Segment at 14:27 (count = 0), Skipped +Segment at 15:11 (count = 10), RegionEntry +Segment at 15:24 (count = 0), Skipped +Segment at 16:12 (count = 10), RegionEntry +Segment at 16:26 (count = 0), Skipped +Segment at 16:27 (count = 0), RegionEntry +Segment at 18:10 (count = 0), Skipped +Segment at 18:19 (count = 10), RegionEntry +Segment at 18:32 (count = 0), Skipped +Segment at 18:33 (count = 3), RegionEntry +Segment at 20:10 (count = 15), RegionEntry +Segment at 20:11 (count = 0), Skipped +Segment at 21:9 (count = 9), RegionEntry +Segment at 21:23 (count = 0), Skipped +Segment at 23:5 (count = 0), RegionEntry +Segment at 24:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.simple_loop.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.simple_loop.txt index 255173e5534d1..6ea09248d65ca 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.simple_loop.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.simple_loop.txt @@ -3,10 +3,10 @@ Counter in file 0 12:9 -> 12:16, (#1 + 0) Counter in file 0 13:5 -> 18:6, #2 Counter in file 0 18:6 -> 18:7, (#1 - #2) Counter in file 0 23:13 -> 25:14, ((#2 + (#1 - #2)) + #3) -Counter in file 0 27:13 -> 27:18, #4 +Counter in file 0 27:13 -> 27:18, (((#2 + (#1 - #2)) + #3) - #3) Counter in file 0 30:9 -> 32:10, #3 Counter in file 0 34:6 -> 34:7, (#2 + (#1 - #2)) -Counter in file 0 35:1 -> 35:2, (#4 + 0) +Counter in file 0 35:1 -> 35:2, ((((#2 + (#1 - #2)) + #3) - #3) + 0) Emitting segments for file: ../coverage/simple_loop.rs Combined regions: 7:9 -> 9:26 (count=1) diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.try_error_result.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.try_error_result.txt index a317cd792910d..5b7f5496af819 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.try_error_result.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.try_error_result.txt @@ -1,12 +1,12 @@ Counter in file 0 13:9 -> 14:23, #1 Counter in file 0 17:9 -> 17:10, ((#1 + (#2 + #3)) - #4) Counter in file 0 19:9 -> 19:14, (#1 + (#2 + #3)) -Counter in file 0 21:9 -> 25:26, #8 -Counter in file 0 27:13 -> 27:41, #9 +Counter in file 0 21:9 -> 25:26, (((#1 + (#2 + #3)) - #4) + 0) +Counter in file 0 27:13 -> 27:41, #8 Counter in file 0 27:41 -> 27:42, #5 -Counter in file 0 28:13 -> 28:42, (#9 - #5) +Counter in file 0 28:13 -> 28:42, (#8 - #5) Counter in file 0 28:42 -> 28:43, #6 -Counter in file 0 32:13 -> 32:42, (#8 - #9) +Counter in file 0 32:13 -> 32:42, (((#1 + (#2 + #3)) - #4) - #8) Counter in file 0 32:42 -> 32:43, #7 Counter in file 0 33:10 -> 33:11, #2 Counter in file 0 33:10 -> 33:11, #3 diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while_early_ret.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while_early_ret.txt index f541baec50c0b..7e79a8f00e1a6 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while_early_ret.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while_early_ret.txt @@ -1,7 +1,7 @@ Counter in file 0 5:9 -> 5:27, #1 Counter in file 0 7:9 -> 9:10, (#1 + #2) Counter in file 0 12:13 -> 14:14, ((#1 + #2) - #3) -Counter in file 0 18:21 -> 20:22, #6 +Counter in file 0 18:21 -> 20:22, (((#1 + #2) - #3) - #2) Counter in file 0 22:21 -> 22:27, #4 Counter in file 0 26:21 -> 26:27, #5 Counter in file 0 30:9 -> 32:10, #2 diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.yield.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.yield.txt new file mode 100644 index 0000000000000..a107535821164 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.yield.txt @@ -0,0 +1,90 @@ +Counter in file 0 8:9 -> 8:22, #1 +Counter in file 0 13:11 -> 14:35, (#1 + 0) +Counter in file 0 14:39 -> 14:41, #4 +Counter in file 0 15:14 -> 15:52, (#2 + #3) +Counter in file 0 17:11 -> 17:46, (#4 + 0) +Counter in file 0 18:34 -> 18:39, (#4 - #5) +Counter in file 0 18:44 -> 18:46, ((#4 - #5) - #6) +Counter in file 0 19:14 -> 19:52, (#5 + #6) +Counter in file 0 22:9 -> 22:22, (((#4 - #5) - #6) + 0) +Counter in file 0 29:11 -> 30:35, (((#4 - #5) - #6) + 0) +Counter in file 0 30:39 -> 30:41, #9 +Counter in file 0 31:14 -> 31:52, (#7 + #8) +Counter in file 0 33:11 -> 34:35, (#9 + 0) +Counter in file 0 34:39 -> 34:41, #12 +Counter in file 0 35:14 -> 35:52, (#10 + #11) +Counter in file 0 37:1 -> 37:2, (#12 + 0) +Counter in file 0 9:9 -> 9:16, #1 +Counter in file 0 10:16 -> 11:6, #2 +Counter in file 0 23:9 -> 23:16, #1 +Counter in file 0 24:9 -> 24:16, #2 +Counter in file 0 25:9 -> 25:16, #3 +Counter in file 0 26:16 -> 27:6, #4 +Emitting segments for file: ../coverage/yield.rs +Combined regions: + 8:9 -> 8:22 (count=1) + 9:9 -> 9:16 (count=1) + 10:16 -> 11:6 (count=1) + 13:11 -> 14:35 (count=1) + 14:39 -> 14:41 (count=1) + 15:14 -> 15:52 (count=0) + 17:11 -> 17:46 (count=1) + 18:34 -> 18:39 (count=1) + 18:44 -> 18:46 (count=1) + 19:14 -> 19:52 (count=0) + 22:9 -> 22:22 (count=1) + 23:9 -> 23:16 (count=1) + 24:9 -> 24:16 (count=1) + 25:9 -> 25:16 (count=0) + 26:16 -> 27:6 (count=0) + 29:11 -> 30:35 (count=1) + 30:39 -> 30:41 (count=1) + 31:14 -> 31:52 (count=0) + 33:11 -> 34:35 (count=1) + 34:39 -> 34:41 (count=1) + 35:14 -> 35:52 (count=0) + 37:1 -> 37:2 (count=1) +Segment at 8:9 (count = 1), RegionEntry +Segment at 8:22 (count = 0), Skipped +Segment at 9:9 (count = 1), RegionEntry +Segment at 9:16 (count = 0), Skipped +Segment at 10:16 (count = 1), RegionEntry +Segment at 11:6 (count = 0), Skipped +Segment at 13:11 (count = 1), RegionEntry +Segment at 14:35 (count = 0), Skipped +Segment at 14:39 (count = 1), RegionEntry +Segment at 14:41 (count = 0), Skipped +Segment at 15:14 (count = 0), RegionEntry +Segment at 15:52 (count = 0), Skipped +Segment at 17:11 (count = 1), RegionEntry +Segment at 17:46 (count = 0), Skipped +Segment at 18:34 (count = 1), RegionEntry +Segment at 18:39 (count = 0), Skipped +Segment at 18:44 (count = 1), RegionEntry +Segment at 18:46 (count = 0), Skipped +Segment at 19:14 (count = 0), RegionEntry +Segment at 19:52 (count = 0), Skipped +Segment at 22:9 (count = 1), RegionEntry +Segment at 22:22 (count = 0), Skipped +Segment at 23:9 (count = 1), RegionEntry +Segment at 23:16 (count = 0), Skipped +Segment at 24:9 (count = 1), RegionEntry +Segment at 24:16 (count = 0), Skipped +Segment at 25:9 (count = 0), RegionEntry +Segment at 25:16 (count = 0), Skipped +Segment at 26:16 (count = 0), RegionEntry +Segment at 27:6 (count = 0), Skipped +Segment at 29:11 (count = 1), RegionEntry +Segment at 30:35 (count = 0), Skipped +Segment at 30:39 (count = 1), RegionEntry +Segment at 30:41 (count = 0), Skipped +Segment at 31:14 (count = 0), RegionEntry +Segment at 31:52 (count = 0), Skipped +Segment at 33:11 (count = 1), RegionEntry +Segment at 34:35 (count = 0), Skipped +Segment at 34:39 (count = 1), RegionEntry +Segment at 34:41 (count = 0), Skipped +Segment at 35:14 (count = 0), RegionEntry +Segment at 35:52 (count = 0), Skipped +Segment at 37:1 (count = 1), RegionEntry +Segment at 37:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.abort.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.abort.json new file mode 100644 index 0000000000000..33cfc9f3ed72c --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.abort.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/abort.rs", + "summary": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 15, + "covered": 13, + "percent": 86.66666666666667 + }, + "regions": { + "count": 10, + "covered": 9, + "notcovered": 1, + "percent": 90 + } + } + } + ], + "totals": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 15, + "covered": 13, + "percent": 86.66666666666667 + }, + "regions": { + "count": 10, + "covered": 9, + "notcovered": 1, + "percent": 90 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.assert.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.assert.json new file mode 100644 index 0000000000000..aa2a0cbebe77e --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.assert.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/assert.rs", + "summary": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 13, + "covered": 10, + "percent": 76.92307692307693 + }, + "regions": { + "count": 14, + "covered": 12, + "notcovered": 2, + "percent": 85.71428571428571 + } + } + } + ], + "totals": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 13, + "covered": 10, + "percent": 76.92307692307693 + }, + "regions": { + "count": 14, + "covered": 12, + "notcovered": 2, + "percent": 85.71428571428571 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.async.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.async.json new file mode 100644 index 0000000000000..004bedeea6280 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.async.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/async.rs", + "summary": { + "functions": { + "count": 9, + "covered": 9, + "percent": 100 + }, + "instantiations": { + "count": 9, + "covered": 9, + "percent": 100 + }, + "lines": { + "count": 31, + "covered": 30, + "percent": 96.7741935483871 + }, + "regions": { + "count": 21, + "covered": 18, + "notcovered": 3, + "percent": 85.71428571428571 + } + } + } + ], + "totals": { + "functions": { + "count": 9, + "covered": 9, + "percent": 100 + }, + "instantiations": { + "count": 9, + "covered": 9, + "percent": 100 + }, + "lines": { + "count": 31, + "covered": 30, + "percent": 96.7741935483871 + }, + "regions": { + "count": 21, + "covered": 18, + "notcovered": 3, + "percent": 85.71428571428571 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.conditions.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.conditions.json index ed937a1b13f38..d69ca80839a30 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.conditions.json +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.conditions.json @@ -16,15 +16,15 @@ "percent": 100 }, "lines": { - "count": 49, - "covered": 23, - "percent": 46.93877551020408 + "count": 64, + "covered": 33, + "percent": 51.5625 }, "regions": { - "count": 69, - "covered": 18, - "notcovered": 51, - "percent": 26.08695652173913 + "count": 88, + "covered": 25, + "notcovered": 63, + "percent": 28.40909090909091 } } } @@ -41,15 +41,15 @@ "percent": 100 }, "lines": { - "count": 49, - "covered": 23, - "percent": 46.93877551020408 + "count": 64, + "covered": 33, + "percent": 51.5625 }, "regions": { - "count": 69, - "covered": 18, - "notcovered": 51, - "percent": 26.08695652173913 + "count": 88, + "covered": 25, + "notcovered": 63, + "percent": 28.40909090909091 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.inner_items.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.inner_items.json index c178e7f93476f..5dc82d2168ccd 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.inner_items.json +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.inner_items.json @@ -16,15 +16,15 @@ "percent": 100 }, "lines": { - "count": 26, - "covered": 26, + "count": 27, + "covered": 27, "percent": 100 }, "regions": { - "count": 15, - "covered": 13, + "count": 11, + "covered": 9, "notcovered": 2, - "percent": 86.66666666666667 + "percent": 81.81818181818183 } } } @@ -41,15 +41,15 @@ "percent": 100 }, "lines": { - "count": 26, - "covered": 26, + "count": 27, + "covered": 27, "percent": 100 }, "regions": { - "count": 15, - "covered": 13, + "count": 11, + "covered": 9, "notcovered": 2, - "percent": 86.66666666666667 + "percent": 81.81818181818183 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.nested_loops.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.nested_loops.json index 68163eb763619..ce3c957e660c5 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.nested_loops.json +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.nested_loops.json @@ -16,15 +16,15 @@ "percent": 100 }, "lines": { - "count": 21, + "count": 22, "covered": 16, - "percent": 76.19047619047619 + "percent": 72.72727272727273 }, "regions": { - "count": 18, - "covered": 14, + "count": 17, + "covered": 13, "notcovered": 4, - "percent": 77.77777777777779 + "percent": 76.47058823529412 } } } @@ -41,15 +41,15 @@ "percent": 100 }, "lines": { - "count": 21, + "count": 22, "covered": 16, - "percent": 76.19047619047619 + "percent": 72.72727272727273 }, "regions": { - "count": 18, - "covered": 14, + "count": 17, + "covered": 13, "notcovered": 4, - "percent": 77.77777777777779 + "percent": 76.47058823529412 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.overflow.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.overflow.json new file mode 100644 index 0000000000000..176bfd7abebac --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.overflow.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/overflow.rs", + "summary": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 21, + "covered": 17, + "percent": 80.95238095238095 + }, + "regions": { + "count": 14, + "covered": 12, + "notcovered": 2, + "percent": 85.71428571428571 + } + } + } + ], + "totals": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 21, + "covered": 17, + "percent": 80.95238095238095 + }, + "regions": { + "count": 14, + "covered": 12, + "notcovered": 2, + "percent": 85.71428571428571 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.panic_unwind.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.panic_unwind.json new file mode 100644 index 0000000000000..5b13109dbe6b2 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.panic_unwind.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/panic_unwind.rs", + "summary": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 17, + "covered": 14, + "percent": 82.35294117647058 + }, + "regions": { + "count": 13, + "covered": 11, + "notcovered": 2, + "percent": 84.61538461538461 + } + } + } + ], + "totals": { + "functions": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "instantiations": { + "count": 2, + "covered": 2, + "percent": 100 + }, + "lines": { + "count": 17, + "covered": 14, + "percent": 82.35294117647058 + }, + "regions": { + "count": 13, + "covered": 11, + "notcovered": 2, + "percent": 84.61538461538461 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.yield.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.yield.json new file mode 100644 index 0000000000000..9f25bc971c558 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.yield.json @@ -0,0 +1,59 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/yield.rs", + "summary": { + "functions": { + "count": 3, + "covered": 3, + "percent": 100 + }, + "instantiations": { + "count": 3, + "covered": 3, + "percent": 100 + }, + "lines": { + "count": 23, + "covered": 16, + "percent": 69.56521739130434 + }, + "regions": { + "count": 22, + "covered": 16, + "notcovered": 6, + "percent": 72.72727272727273 + } + } + } + ], + "totals": { + "functions": { + "count": 3, + "covered": 3, + "percent": 100 + }, + "instantiations": { + "count": 3, + "covered": 3, + "percent": 100 + }, + "lines": { + "count": 23, + "covered": 16, + "percent": 69.56521739130434 + }, + "regions": { + "count": 22, + "covered": 16, + "notcovered": 6, + "percent": 72.72727272727273 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.abort.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.abort.txt new file mode 100644 index 0000000000000..40c9c71a2aad4 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.abort.txt @@ -0,0 +1,35 @@ + 1| |#![feature(unwind_attributes)] + 2| |#![allow(unused_assignments)] + 3| | + 4| |#[unwind(aborts)] + 5| |fn might_abort(should_abort: bool) { + 6| 4| if should_abort { + 7| 0| println!("aborting..."); + 8| 0| panic!("panics and aborts"); + 9| 4| } else { + 10| 4| println!("Don't Panic"); + 11| 4| } + 12| 4|} + 13| | + 14| |fn main() -> Result<(),u8> { + 15| 1| let mut countdown = 10; + 16| 11| while countdown > 0 { + 17| 10| if countdown < 5 { + 18| 4| might_abort(false); + 19| 6| } + 20| 10| countdown -= 1; + 21| | } + 22| 1| Ok(()) + 23| 1|} + 24| | + 25| |// Notes: + 26| |// 1. Compare this program and its coverage results to those of the similar tests + 27| |// `panic_unwind.rs` and `try_error_result.rs`. + 28| |// 2. This test confirms the coverage generated when a program includes `TerminatorKind::Abort`. + 29| |// 3. The test does not invoke the abort. By executing to a successful completion, the coverage + 30| |// results show where the program did and did not execute. + 31| |// 4. If the program actually aborted, the coverage counters would not be saved (which "works as + 32| |// intended"). Coverage results would show no executed coverage regions. + 33| |// 6. If `should_abort` is `true` and the program aborts, the program exits with a `132` status + 34| |// (on Linux at least). + diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.assert.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.assert.txt new file mode 100644 index 0000000000000..a6efcbabd3522 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.assert.txt @@ -0,0 +1,34 @@ + 1| |#![allow(unused_assignments)] + 2| |// expect-exit-status-101 + 3| | + 4| |fn might_fail_assert(one_plus_one: u32) { + 5| 4| println!("does 1 + 1 = {}?", one_plus_one); + 6| 4| assert_eq!(1 + 1, one_plus_one, "the argument was wrong"); + ^1 + 7| 3|} + 8| | + 9| |fn main() -> Result<(),u8> { + 10| 1| let mut countdown = 10; + 11| 10| while countdown > 0 { + 12| 10| if countdown == 1 { + 13| 0| might_fail_assert(3); + 14| 10| } else if countdown < 5 { + 15| 3| might_fail_assert(2); + 16| 15| } + 17| 9| countdown -= 1; + 18| | } + 19| 0| Ok(()) + 20| 0|} + 21| | + 22| |// Notes: + 23| |// 1. Compare this program and its coverage results to those of the very similar test + 24| |// `panic_unwind.rs`, and similar tests `abort.rs` and `try_error_result.rs`. + 25| |// 2. This test confirms the coverage generated when a program passes or fails an `assert!()` or + 26| |// related `assert_*!()` macro. + 27| |// 3. Notably, the `assert` macros *do not* generate `TerminatorKind::Assert`. The macros produce + 28| |// conditional expressions, `TerminatorKind::SwitchInt` branches, and a possible call to + 29| |// `begin_panic_fmt()` (that begins a panic unwind, if the assertion test fails). + 30| |// 4. `TerminatoKind::Assert` is, however, also present in the MIR generated for this test + 31| |// (and in many other coverage tests). The `Assert` terminator is typically generated by the + 32| |// Rust compiler to check for runtime failures, such as numeric overflows. + diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.async.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.async.txt new file mode 100644 index 0000000000000..b5d99732102d0 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.async.txt @@ -0,0 +1,66 @@ + 1| |#![allow(unused_assignments)] + 2| | + 3| |// require-rust-edition-2018 + 4| | + 5| 1|async fn f() -> u8 { 1 } + 6| | + 7| |async fn foo() -> [bool; 10] { [false; 10] } + 8| | + 9| |pub async fn g(x: u8) { + 10| | match x { + 11| | y if f().await == y => (), + 12| | _ => (), + 13| | } + 14| 1|} + 15| | + 16| |// #78366: check the reference to the binding is recorded even if the binding is not autorefed + 17| | + 18| |async fn h(x: usize) { + 19| | match x { + 20| | y if foo().await[y] => (), + 21| | _ => (), + 22| | } + 23| 1|} + 24| | + 25| 1|async fn i(x: u8) { + 26| 1| match x { + 27| 1| y if f().await == y + 1 => (), + ^0 ^0 + 28| 1| _ => (), + 29| | } + 30| 2|} + 31| | + 32| 1|fn main() { + 33| 1| let _ = g(10); + 34| 1| let _ = h(9); + 35| 1| let mut future = Box::pin(i(8)); + 36| 1| executor::block_on(future.as_mut()); + 37| 1|} + 38| | + 39| |mod executor { + 40| | use core::{ + 41| | future::Future, + 42| | pin::Pin, + 43| | task::{Context, Poll, RawWaker, RawWakerVTable, Waker}, + 44| | }; + 45| | + 46| | pub fn block_on(mut future: F) -> F::Output { + 47| 1| let mut future = unsafe { Pin::new_unchecked(&mut future) }; + 48| 1| + 49| 1| static VTABLE: RawWakerVTable = RawWakerVTable::new( + 50| 1| |_| unimplemented!("clone"), + 51| 1| |_| unimplemented!("wake"), + 52| 1| |_| unimplemented!("wake_by_ref"), + 53| 1| |_| (), + 54| 1| ); + 55| 1| let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; + 56| 1| let mut context = Context::from_waker(&waker); + 57| | + 58| | loop { + 59| 1| if let Poll::Ready(val) = future.as_mut().poll(&mut context) { + 60| 1| break val; + 61| | } + 62| 0| } + 63| 1| } + 64| |} + diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.conditions.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.conditions.txt index 173ff4aa4c481..e55a574c056b8 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.conditions.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.conditions.txt @@ -27,7 +27,8 @@ 27| | 28| 1| if countdown > 7 { 29| 1| countdown -= 4; - 30| 0| } else if countdown > 2 { + 30| 1| } else if countdown > 2 { + ^0 31| 0| if countdown < 1 || countdown > 5 || countdown != 9 { 32| 0| countdown = 0; 33| 0| } @@ -36,34 +37,70 @@ 36| 0| return; 37| | } 38| | - 39| 1| let mut countdown = 0; - 40| 1| if true { - 41| 1| countdown = 1; - 42| 1| } - 43| | - 44| 1| let z = if countdown > 7 { - ^0 - 45| 0| countdown -= 4; - 46| 1| } else if countdown > 2 { - 47| 0| if countdown < 1 || countdown > 5 || countdown != 9 { - 48| 0| countdown = 0; - 49| 0| } - 50| 0| countdown -= 5; - 51| | } else { - 52| 1| let should_be_reachable = countdown; - 53| 1| println!("reached"); - 54| 1| return; - 55| | }; + 39| 1| if true { + 40| | // Demonstrate the difference with `TerminatorKind::Assert` as of 2020-11-15. Assert is no + 41| | // longer treated as a `BasicCoverageBlock` terminator, which changed the coverage region, + 42| | // for the executed `then` block above, to include the closing brace on line 30. That + 43| | // changed the line count, but the coverage code region (for the `else if` condition) is + 44| | // still valid. + 45| | // + 46| | // Note that `if` (then) and `else` blocks include the closing brace in their coverage + 47| | // code regions when the last line in the block ends in a semicolon, because the Rust + 48| | // compiler inserts a `StatementKind::Assign` to assign `const ()` to a `Place`, for the + 49| | // empty value for the executed block. When the last line does not end in a semicolon + 50| | // (that is, when the block actually results in a value), the additional `Assign` is not + 51| | // generated, and the brace is not included. + 52| 1| let mut countdown = 0; + 53| 1| if true { + 54| 1| countdown = 10; + 55| 1| } 56| | - 57| 0| let w = if countdown > 7 { - 58| 0| countdown -= 4; - 59| 0| } else if countdown > 2 { - 60| 0| if countdown < 1 || countdown > 5 || countdown != 9 { - 61| 0| countdown = 0; - 62| 0| } - 63| 0| countdown -= 5; - 64| | } else { - 65| 0| return; - 66| | }; - 67| 1|} + 57| 1| if countdown > 7 { + 58| 1| countdown -= 4; + 59| 1| } + 60| | // The closing brace of the `then` branch is now included in the coverage region, and shown + 61| | // as "executed" (giving its line a count of 1 here). Since, in the original version above, + 62| | // the closing brace shares the same line as the `else if` conditional expression (which is + 63| | // not executed if the first `then` condition is true), only the condition's code region is + 64| | // marked with a count of 0 now. + 65| 0| else if countdown > 2 { + 66| 0| if countdown < 1 || countdown > 5 || countdown != 9 { + 67| 0| countdown = 0; + 68| 0| } + 69| 0| countdown -= 5; + 70| | } else { + 71| 0| return; + 72| | } + 73| 1| } + 74| | + 75| 1| let mut countdown = 0; + 76| 1| if true { + 77| 1| countdown = 1; + 78| 1| } + 79| | + 80| 1| let z = if countdown > 7 { + ^0 + 81| 0| countdown -= 4; + 82| 1| } else if countdown > 2 { + 83| 0| if countdown < 1 || countdown > 5 || countdown != 9 { + 84| 0| countdown = 0; + 85| 0| } + 86| 0| countdown -= 5; + 87| | } else { + 88| 1| let should_be_reachable = countdown; + 89| 1| println!("reached"); + 90| 1| return; + 91| | }; + 92| | + 93| 0| let w = if countdown > 7 { + 94| 0| countdown -= 4; + 95| 0| } else if countdown > 2 { + 96| 0| if countdown < 1 || countdown > 5 || countdown != 9 { + 97| 0| countdown = 0; + 98| 0| } + 99| 0| countdown -= 5; + 100| | } else { + 101| 0| return; + 102| | }; + 103| 1|} diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.inner_items.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.inner_items.txt index 4a51f842a4bb2..efd9cd4f72d3e 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.inner_items.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.inner_items.txt @@ -38,7 +38,7 @@ 37| | } 38| | 39| | impl InTrait for InStruct { - 40| | fn trait_func(&mut self, incr: u32) { + 40| 1| fn trait_func(&mut self, incr: u32) { 41| 1| self.in_struct_field += incr; 42| 1| in_func(self.in_struct_field); 43| 1| } diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.nested_loops.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.nested_loops.txt index c9f373bf6a7c0..dd86a85815b3b 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.nested_loops.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.nested_loops.txt @@ -15,7 +15,7 @@ 15| 1| a -= 10; 16| 1| if is_true { 17| 1| break 'outer; - 18| | } else { + 18| 0| } else { 19| 0| a -= 2; 20| 0| } 21| 2| } diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.overflow.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.overflow.txt new file mode 100644 index 0000000000000..322de1da25a26 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.overflow.txt @@ -0,0 +1,64 @@ + 1| |#![allow(unused_assignments)] + 2| |// expect-exit-status-101 + 3| | + 4| |fn might_overflow(to_add: u32) -> u32 { + 5| 4| if to_add > 5 { + 6| 1| println!("this will probably overflow"); + 7| 3| } + 8| 4| let add_to = u32::MAX - 5; + 9| 4| println!("does {} + {} overflow?", add_to, to_add); + 10| 4| let result = to_add + add_to; + 11| 4| println!("continuing after overflow check"); + 12| 4| result + 13| 4|} + 14| | + 15| |fn main() -> Result<(),u8> { + 16| 1| let mut countdown = 10; + 17| 10| while countdown > 0 { + 18| 10| if countdown == 1 { + 19| 0| let result = might_overflow(10); + 20| 0| println!("Result: {}", result); + 21| 10| } else if countdown < 5 { + 22| 3| let result = might_overflow(1); + 23| 3| println!("Result: {}", result); + 24| 15| } + 25| 9| countdown -= 1; + 26| | } + 27| 0| Ok(()) + 28| 0|} + 29| | + 30| |// Notes: + 31| |// 1. Compare this program and its coverage results to those of the very similar test `assert.rs`, + 32| |// and similar tests `panic_unwind.rs`, abort.rs` and `try_error_result.rs`. + 33| |// 2. This test confirms the coverage generated when a program passes or fails a + 34| |// compiler-generated `TerminatorKind::Assert` (based on an overflow check, in this case). + 35| |// 3. Similar to how the coverage instrumentation handles `TerminatorKind::Call`, + 36| |// compiler-generated assertion failures are assumed to be a symptom of a program bug, not + 37| |// expected behavior. To simplify the coverage graphs and keep instrumented programs as + 38| |// small and fast as possible, `Assert` terminators are assumed to always succeed, and + 39| |// therefore are considered "non-branching" terminators. So, an `Assert` terminator does not + 40| |// get its own coverage counter. + 41| |// 4. After an unhandled panic or failed Assert, coverage results may not always be intuitive. + 42| |// In this test, the final count for the statements after the `if` block in `might_overflow()` + 43| |// is 4, even though the lines after `to_add + add_to` were executed only 3 times. Depending + 44| |// on the MIR graph and the structure of the code, this count could have been 3 (which might + 45| |// have been valid for the overflowed add `+`, but should have been 4 for the lines before + 46| |// the overflow. The reason for this potential uncertainty is, a `CounterKind` is incremented + 47| |// via StatementKind::Counter at the end of the block, but (as in the case in this test), + 48| |// a CounterKind::Expression is always evaluated. In this case, the expression was based on + 49| |// a `Counter` incremented as part of the evaluation of the `if` expression, which was + 50| |// executed, and counted, 4 times, before reaching the overflow add. + 51| | + 52| |// If the program did not overflow, the coverage for `might_overflow()` would look like this: + 53| |// + 54| |// 4| |fn might_overflow(to_add: u32) -> u32 { + 55| |// 5| 4| if to_add > 5 { + 56| |// 6| 0| println!("this will probably overflow"); + 57| |// 7| 4| } + 58| |// 8| 4| let add_to = u32::MAX - 5; + 59| |// 9| 4| println!("does {} + {} overflow?", add_to, to_add); + 60| |// 10| 4| let result = to_add + add_to; + 61| |// 11| 4| println!("continuing after overflow check"); + 62| |// 12| 4| result + 63| |// 13| 4|} + diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.panic_unwind.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.panic_unwind.txt new file mode 100644 index 0000000000000..f5149c11b7be0 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.panic_unwind.txt @@ -0,0 +1,50 @@ + 1| |#![allow(unused_assignments)] + 2| |// expect-exit-status-101 + 3| | + 4| |fn might_panic(should_panic: bool) { + 5| 4| if should_panic { + 6| 1| println!("panicking..."); + 7| 1| panic!("panics"); + 8| 3| } else { + 9| 3| println!("Don't Panic"); + 10| 3| } + 11| 3|} + 12| | + 13| |fn main() -> Result<(),u8> { + 14| 1| let mut countdown = 10; + 15| 10| while countdown > 0 { + 16| 10| if countdown == 1 { + 17| 0| might_panic(true); + 18| 10| } else if countdown < 5 { + 19| 3| might_panic(false); + 20| 15| } + 21| 9| countdown -= 1; + 22| | } + 23| 0| Ok(()) + 24| 0|} + 25| | + 26| |// Notes: + 27| |// 1. Compare this program and its coverage results to those of the similar tests `abort.rs` and + 28| |// `try_error_result.rs`. + 29| |// 2. Since the `panic_unwind.rs` test is allowed to unwind, it is also allowed to execute the + 30| |// normal program exit cleanup, including writing out the current values of the coverage + 31| |// counters. + 32| |// 3. The coverage results show (interestingly) that the `panic!()` call did execute, but it does + 33| |// not show coverage of the `if countdown == 1` branch in `main()` that calls + 34| |// `might_panic(true)` (causing the call to `panic!()`). + 35| |// 4. The reason `main()`s `if countdown == 1` branch, calling `might_panic(true)`, appears + 36| |// "uncovered" is, InstrumentCoverage (intentionally) treats `TerminatorKind::Call` terminators + 37| |// as non-branching, because when a program executes normally, they always are. Errors handled + 38| |// via the try `?` operator produce error handling branches that *are* treated as branches in + 39| |// coverage results. By treating calls without try `?` operators as non-branching (assumed to + 40| |// return normally and continue) the coverage graph can be simplified, producing smaller, + 41| |// faster binaries, and cleaner coverage results. + 42| |// 5. The reason the coverage results actually show `panic!()` was called is most likely because + 43| |// `panic!()` is a macro, not a simple function call, and there are other `Statement`s and/or + 44| |// `Terminator`s that execute with a coverage counter before the panic and unwind occur. + 45| |// 6. By best practice, programs should not panic. By design, the coverage implementation will not + 46| |// incur additional cost (in program size and execution time) to improve coverage results for + 47| |// an event that is not supposted to happen. + 48| |// 7. FIXME(#78544): This issue describes a feature request for a proposed option to enable + 49| |// more accurate coverage results for tests that intentionally panic. + diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.yield.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.yield.txt new file mode 100644 index 0000000000000..28813dd6d0b07 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.yield.txt @@ -0,0 +1,38 @@ + 1| |#![feature(generators, generator_trait)] + 2| |#![allow(unused_assignments)] + 3| | + 4| |use std::ops::{Generator, GeneratorState}; + 5| |use std::pin::Pin; + 6| | + 7| |fn main() { + 8| 1| let mut generator = || { + 9| 1| yield 1; + 10| 1| return "foo" + 11| 1| }; + 12| | + 13| 1| match Pin::new(&mut generator).resume(()) { + 14| 1| GeneratorState::Yielded(1) => {} + 15| 0| _ => panic!("unexpected value from resume"), + 16| | } + 17| 1| match Pin::new(&mut generator).resume(()) { + 18| 1| GeneratorState::Complete("foo") => {} + 19| 0| _ => panic!("unexpected value from resume"), + 20| | } + 21| | + 22| 1| let mut generator = || { + 23| 1| yield 1; + 24| 1| yield 2; + 25| 0| yield 3; + 26| 0| return "foo" + 27| 0| }; + 28| | + 29| 1| match Pin::new(&mut generator).resume(()) { + 30| 1| GeneratorState::Yielded(1) => {} + 31| 0| _ => panic!("unexpected value from resume"), + 32| | } + 33| 1| match Pin::new(&mut generator).resume(()) { + 34| 1| GeneratorState::Yielded(2) => {} + 35| 0| _ => panic!("unexpected value from resume"), + 36| | } + 37| 1|} + diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.abort.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.abort.txt new file mode 100644 index 0000000000000..e787e5e152d56 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.abort.txt @@ -0,0 +1,41 @@ +Counter in file 0 15:9 -> 15:27, #1 +Counter in file 0 16:11 -> 16:24, (#1 + (#2 + #3)) +Counter in file 0 17:12 -> 17:25, ((#1 + (#2 + #3)) - #4) +Counter in file 0 17:26 -> 19:10, #2 +Counter in file 0 19:10 -> 19:11, #3 +Counter in file 0 20:9 -> 20:23, (#2 + #3) +Counter in file 0 22:5 -> 23:2, #4 +Counter in file 0 6:8 -> 6:20, #1 +Counter in file 0 7:9 -> 8:37, #2 +Counter in file 0 9:12 -> 12:2, (#1 - #2) +Emitting segments for file: ../coverage/abort.rs +Combined regions: + 6:8 -> 6:20 (count=4) + 7:9 -> 8:37 (count=0) + 9:12 -> 12:2 (count=4) + 15:9 -> 15:27 (count=1) + 16:11 -> 16:24 (count=11) + 17:12 -> 17:25 (count=10) + 17:26 -> 19:10 (count=4) + 19:10 -> 19:11 (count=6) + 20:9 -> 20:23 (count=10) + 22:5 -> 23:2 (count=1) +Segment at 6:8 (count = 4), RegionEntry +Segment at 6:20 (count = 0), Skipped +Segment at 7:9 (count = 0), RegionEntry +Segment at 8:37 (count = 0), Skipped +Segment at 9:12 (count = 4), RegionEntry +Segment at 12:2 (count = 0), Skipped +Segment at 15:9 (count = 1), RegionEntry +Segment at 15:27 (count = 0), Skipped +Segment at 16:11 (count = 11), RegionEntry +Segment at 16:24 (count = 0), Skipped +Segment at 17:12 (count = 10), RegionEntry +Segment at 17:25 (count = 0), Skipped +Segment at 17:26 (count = 4), RegionEntry +Segment at 19:10 (count = 6), RegionEntry +Segment at 19:11 (count = 0), Skipped +Segment at 20:9 (count = 10), RegionEntry +Segment at 20:23 (count = 0), Skipped +Segment at 22:5 (count = 1), RegionEntry +Segment at 23:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.assert.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.assert.txt new file mode 100644 index 0000000000000..81cb6c03da702 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.assert.txt @@ -0,0 +1,54 @@ +Counter in file 0 10:9 -> 10:27, #1 +Counter in file 0 11:11 -> 11:24, (#1 + (#2 + (#3 + #4))) +Counter in file 0 12:12 -> 12:26, ((#1 + (#2 + (#3 + #4))) - #5) +Counter in file 0 12:27 -> 14:10, #2 +Counter in file 0 14:19 -> 14:32, (((#1 + (#2 + (#3 + #4))) - #5) - #2) +Counter in file 0 14:33 -> 16:10, #3 +Counter in file 0 16:10 -> 16:11, #4 +Counter in file 0 16:10 -> 16:11, (#3 + #4) +Counter in file 0 17:9 -> 17:23, (#2 + (#3 + #4)) +Counter in file 0 19:5 -> 20:2, #5 +Counter in file 0 5:5 -> 5:48, #1 +Counter in file 0 6:16 -> 6:21, (#1 + 0) +Counter in file 0 6:37 -> 6:61, #2 +Counter in file 0 7:1 -> 7:2, (#1 - #2) +Emitting segments for file: ../coverage/assert.rs +Combined regions: + 5:5 -> 5:48 (count=4) + 6:16 -> 6:21 (count=4) + 6:37 -> 6:61 (count=1) + 7:1 -> 7:2 (count=3) + 10:9 -> 10:27 (count=1) + 11:11 -> 11:24 (count=10) + 12:12 -> 12:26 (count=10) + 12:27 -> 14:10 (count=0) + 14:19 -> 14:32 (count=10) + 14:33 -> 16:10 (count=3) + 16:10 -> 16:11 (count=15) + 17:9 -> 17:23 (count=9) + 19:5 -> 20:2 (count=0) +Segment at 5:5 (count = 4), RegionEntry +Segment at 5:48 (count = 0), Skipped +Segment at 6:16 (count = 4), RegionEntry +Segment at 6:21 (count = 0), Skipped +Segment at 6:37 (count = 1), RegionEntry +Segment at 6:61 (count = 0), Skipped +Segment at 7:1 (count = 3), RegionEntry +Segment at 7:2 (count = 0), Skipped +Segment at 10:9 (count = 1), RegionEntry +Segment at 10:27 (count = 0), Skipped +Segment at 11:11 (count = 10), RegionEntry +Segment at 11:24 (count = 0), Skipped +Segment at 12:12 (count = 10), RegionEntry +Segment at 12:26 (count = 0), Skipped +Segment at 12:27 (count = 0), RegionEntry +Segment at 14:10 (count = 0), Skipped +Segment at 14:19 (count = 10), RegionEntry +Segment at 14:32 (count = 0), Skipped +Segment at 14:33 (count = 3), RegionEntry +Segment at 16:10 (count = 15), RegionEntry +Segment at 16:11 (count = 0), Skipped +Segment at 17:9 (count = 9), RegionEntry +Segment at 17:23 (count = 0), Skipped +Segment at 19:5 (count = 0), RegionEntry +Segment at 20:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.async.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.async.txt new file mode 100644 index 0000000000000..f1f02faba5365 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.async.txt @@ -0,0 +1,85 @@ +Counter in file 0 15:9 -> 15:75, #1 +Counter in file 0 15:9 -> 15:75, #1 +Counter in file 0 15:9 -> 15:75, #1 +Counter in file 0 47:13 -> 56:54, #1 +Counter in file 0 59:32 -> 59:35, ((#1 + #2) - #2) +Counter in file 0 59:39 -> 59:73, (#1 + #2) +Counter in file 0 60:23 -> 60:26, (((#1 + #2) - #2) + 0) +Counter in file 0 62:10 -> 62:11, #2 +Counter in file 0 63:5 -> 63:6, (((#1 + #2) - #2) + 0) +Counter in file 0 53:17 -> 53:19, #1 +Counter in file 0 7:44 -> 7:45, #1 +Counter in file 0 5:24 -> 5:25, #1 +Counter in file 0 5:22 -> 5:25, #1 +Counter in file 0 25:19 -> 26:12, #1 +Counter in file 0 27:9 -> 27:10, #3 +Counter in file 0 27:14 -> 27:17, (#1 + 0) +Counter in file 0 27:27 -> 27:32, #2 +Counter in file 0 27:32 -> 27:33, (#2 - #3) +Counter in file 0 27:36 -> 27:38, (#3 + 0) +Counter in file 0 28:14 -> 28:16, #4 +Counter in file 0 30:1 -> 30:2, (#3 + #4) +Counter in file 0 32:11 -> 37:2, #1 +Counter in file 0 30:1 -> 30:2, #1 +Counter in file 0 14:1 -> 14:2, #1 +Counter in file 0 23:1 -> 23:2, #1 +Emitting segments for file: ../coverage/async.rs +Combined regions: + 5:22 -> 5:25 (count=1) + 5:24 -> 5:25 (count=1) + 14:1 -> 14:2 (count=1) + 23:1 -> 23:2 (count=1) + 25:19 -> 26:12 (count=1) + 27:9 -> 27:10 (count=0) + 27:14 -> 27:17 (count=1) + 27:27 -> 27:32 (count=1) + 27:32 -> 27:33 (count=1) + 27:36 -> 27:38 (count=0) + 28:14 -> 28:16 (count=1) + 30:1 -> 30:2 (count=2) + 32:11 -> 37:2 (count=1) + 47:13 -> 56:54 (count=1) + 53:17 -> 53:19 (count=1) + 59:32 -> 59:35 (count=1) + 59:39 -> 59:73 (count=1) + 60:23 -> 60:26 (count=1) + 62:10 -> 62:11 (count=0) + 63:5 -> 63:6 (count=1) +Segment at 5:22 (count = 1), RegionEntry +Segment at 5:24 (count = 1), RegionEntry +Segment at 5:25 (count = 0), Skipped +Segment at 14:1 (count = 1), RegionEntry +Segment at 14:2 (count = 0), Skipped +Segment at 23:1 (count = 1), RegionEntry +Segment at 23:2 (count = 0), Skipped +Segment at 25:19 (count = 1), RegionEntry +Segment at 26:12 (count = 0), Skipped +Segment at 27:9 (count = 0), RegionEntry +Segment at 27:10 (count = 0), Skipped +Segment at 27:14 (count = 1), RegionEntry +Segment at 27:17 (count = 0), Skipped +Segment at 27:27 (count = 1), RegionEntry +Segment at 27:32 (count = 1), RegionEntry +Segment at 27:33 (count = 0), Skipped +Segment at 27:36 (count = 0), RegionEntry +Segment at 27:38 (count = 0), Skipped +Segment at 28:14 (count = 1), RegionEntry +Segment at 28:16 (count = 0), Skipped +Segment at 30:1 (count = 2), RegionEntry +Segment at 30:2 (count = 0), Skipped +Segment at 32:11 (count = 1), RegionEntry +Segment at 37:2 (count = 0), Skipped +Segment at 47:13 (count = 1), RegionEntry +Segment at 53:17 (count = 1), RegionEntry +Segment at 53:19 (count = 1) +Segment at 56:54 (count = 0), Skipped +Segment at 59:32 (count = 1), RegionEntry +Segment at 59:35 (count = 0), Skipped +Segment at 59:39 (count = 1), RegionEntry +Segment at 59:73 (count = 0), Skipped +Segment at 60:23 (count = 1), RegionEntry +Segment at 60:26 (count = 0), Skipped +Segment at 62:10 (count = 0), RegionEntry +Segment at 62:11 (count = 0), Skipped +Segment at 63:5 (count = 1), RegionEntry +Segment at 63:6 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.conditions.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.conditions.txt index d48cd8074bebb..a4c1a9c0f121a 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.conditions.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.conditions.txt @@ -1,72 +1,91 @@ Counter in file 0 4:9 -> 4:26, #1 Counter in file 0 5:8 -> 5:12, (#1 + 0) Counter in file 0 5:13 -> 7:6, #2 -Counter in file 0 10:9 -> 10:10, (#4 + #11) +Counter in file 0 10:9 -> 10:10, (#3 + (#12 + #13)) Counter in file 0 10:16 -> 10:29, (#2 + 0) -Counter in file 0 11:9 -> 12:10, #4 +Counter in file 0 11:9 -> 12:10, #3 Counter in file 0 13:15 -> 13:28, ((#2 + 0) - #3) -Counter in file 0 14:12 -> 14:25, #5 -Counter in file 0 14:29 -> 14:42, (#5 - #13) -Counter in file 0 14:42 -> 14:43, (#13 + #14) -Counter in file 0 14:42 -> 14:43, ((#5 - #13) - #14) -Counter in file 0 14:46 -> 14:60, #21 -Counter in file 0 14:60 -> 14:61, (#17 + #18) -Counter in file 0 14:60 -> 14:61, (#21 - #18) -Counter in file 0 14:61 -> 16:10, #22 -Counter in file 0 16:10 -> 16:11, #23 -Counter in file 0 17:9 -> 18:18, #11 -Counter in file 0 20:9 -> 20:15, (((#2 + 0) - #3) - #5) -Counter in file 0 23:9 -> 23:26, ((#4 + #11) + 0) -Counter in file 0 24:8 -> 24:12, ((#4 + #11) + 0) -Counter in file 0 24:13 -> 26:6, #12 -Counter in file 0 28:8 -> 28:21, (#12 + 0) -Counter in file 0 29:9 -> 29:23, #16 -Counter in file 0 30:15 -> 30:28, ((#12 + 0) - #15) -Counter in file 0 31:12 -> 31:25, (((#12 + 0) - #15) - #8) -Counter in file 0 31:29 -> 31:42, ((((#12 + 0) - #15) - #8) - #24) -Counter in file 0 31:42 -> 31:43, (((((#12 + 0) - #15) - #8) - #24) - #25) +Counter in file 0 14:12 -> 14:25, #4 +Counter in file 0 14:29 -> 14:42, (#4 - #15) +Counter in file 0 14:42 -> 14:43, ((#4 - #15) - #16) +Counter in file 0 14:42 -> 14:43, (#15 + #16) +Counter in file 0 14:46 -> 14:60, #23 +Counter in file 0 14:60 -> 14:61, (#18 + #19) +Counter in file 0 14:60 -> 14:61, (#23 - #19) +Counter in file 0 14:61 -> 16:10, #12 +Counter in file 0 16:10 -> 16:11, #13 +Counter in file 0 17:9 -> 18:18, (#12 + #13) +Counter in file 0 20:9 -> 20:15, (((#2 + 0) - #3) - #4) +Counter in file 0 23:9 -> 23:26, ((#3 + (#12 + #13)) + 0) +Counter in file 0 24:8 -> 24:12, ((#3 + (#12 + #13)) + 0) +Counter in file 0 24:13 -> 26:6, #14 +Counter in file 0 28:8 -> 28:21, (#14 + 0) +Counter in file 0 28:22 -> 30:6, #17 +Counter in file 0 30:15 -> 30:28, ((#14 + 0) - #17) +Counter in file 0 31:12 -> 31:25, (((#14 + 0) - #17) - #8) +Counter in file 0 31:29 -> 31:42, ((((#14 + 0) - #17) - #8) - #24) +Counter in file 0 31:42 -> 31:43, (((((#14 + 0) - #17) - #8) - #24) - #25) Counter in file 0 31:42 -> 31:43, (#24 + #25) -Counter in file 0 31:46 -> 31:60, #32 -Counter in file 0 31:60 -> 31:61, (#28 + #29) -Counter in file 0 31:60 -> 31:61, (#32 - #29) -Counter in file 0 31:61 -> 33:10, #33 -Counter in file 0 33:10 -> 33:11, #34 -Counter in file 0 34:9 -> 34:23, #19 +Counter in file 0 31:46 -> 31:60, #34 +Counter in file 0 31:60 -> 31:61, (#34 - #32) +Counter in file 0 31:60 -> 31:61, (#31 + #32) +Counter in file 0 31:61 -> 33:10, #20 +Counter in file 0 33:10 -> 33:11, #21 +Counter in file 0 34:9 -> 34:23, (#20 + #21) Counter in file 0 36:9 -> 36:15, #8 -Counter in file 0 39:9 -> 39:26, (#16 + #19) -Counter in file 0 40:8 -> 40:12, ((#16 + #19) + 0) -Counter in file 0 40:13 -> 42:6, #20 -Counter in file 0 44:9 -> 44:10, (#27 + #30) -Counter in file 0 44:16 -> 44:29, (#20 + 0) -Counter in file 0 45:9 -> 45:23, #27 -Counter in file 0 46:15 -> 46:28, ((#20 + 0) - #26) -Counter in file 0 47:12 -> 47:25, (((#20 + 0) - #26) - #7) -Counter in file 0 47:29 -> 47:42, ((((#20 + 0) - #26) - #7) - #35) -Counter in file 0 47:42 -> 47:43, (#35 + #36) -Counter in file 0 47:42 -> 47:43, (((((#20 + 0) - #26) - #7) - #35) - #36) -Counter in file 0 47:46 -> 47:60, #41 -Counter in file 0 47:60 -> 47:61, (#37 + #38) -Counter in file 0 47:60 -> 47:61, (#41 - #38) -Counter in file 0 47:61 -> 49:10, #42 -Counter in file 0 49:10 -> 49:11, #43 -Counter in file 0 50:9 -> 50:23, #30 -Counter in file 0 52:13 -> 54:15, #7 -Counter in file 0 57:9 -> 57:10, (#9 + #10) -Counter in file 0 57:16 -> 57:29, ((#27 + #30) + 0) -Counter in file 0 58:9 -> 58:23, #9 -Counter in file 0 59:15 -> 59:28, ((#27 + #30) - #31) -Counter in file 0 60:12 -> 60:25, (((#27 + #30) - #31) - #6) -Counter in file 0 60:29 -> 60:42, ((((#27 + #30) - #31) - #6) - #39) -Counter in file 0 60:42 -> 60:43, (#39 + #40) -Counter in file 0 60:42 -> 60:43, (((((#27 + #30) - #31) - #6) - #39) - #40) -Counter in file 0 60:46 -> 60:60, #46 -Counter in file 0 60:60 -> 60:61, (#46 - #45) -Counter in file 0 60:60 -> 60:61, (#44 + #45) -Counter in file 0 60:61 -> 62:10, #47 -Counter in file 0 62:10 -> 62:11, #48 -Counter in file 0 63:9 -> 63:23, #10 -Counter in file 0 65:9 -> 65:15, #6 -Counter in file 0 67:1 -> 67:2, ((#9 + #10) + (((#6 + #7) + #8) + (((#2 + 0) - #3) - #5))) +Counter in file 0 39:8 -> 39:12, (#17 + (#20 + #21)) +Counter in file 0 52:13 -> 52:30, #22 +Counter in file 0 53:12 -> 53:16, (#22 + 0) +Counter in file 0 53:17 -> 55:10, #26 +Counter in file 0 57:12 -> 57:25, (#26 + 0) +Counter in file 0 57:26 -> 59:10, #27 +Counter in file 0 65:17 -> 65:30, ((#26 + 0) - #27) +Counter in file 0 66:16 -> 66:29, (((#26 + 0) - #27) - #7) +Counter in file 0 66:33 -> 66:46, ((((#26 + 0) - #27) - #7) - #37) +Counter in file 0 66:46 -> 66:47, (#37 + #38) +Counter in file 0 66:46 -> 66:47, (((((#26 + 0) - #27) - #7) - #37) - #38) +Counter in file 0 66:50 -> 66:64, #47 +Counter in file 0 66:64 -> 66:65, (#47 - #42) +Counter in file 0 66:64 -> 66:65, (#41 + #42) +Counter in file 0 66:65 -> 68:14, #28 +Counter in file 0 68:14 -> 68:15, #29 +Counter in file 0 69:13 -> 69:27, (#28 + #29) +Counter in file 0 71:13 -> 71:19, #7 +Counter in file 0 73:6 -> 73:7, (#27 + (#28 + #29)) +Counter in file 0 75:9 -> 75:26, ((#27 + (#28 + #29)) + 0) +Counter in file 0 76:8 -> 76:12, (((#27 + (#28 + #29)) + 0) + 0) +Counter in file 0 76:13 -> 78:6, #30 +Counter in file 0 80:9 -> 80:10, (#33 + (#35 + #36)) +Counter in file 0 80:16 -> 80:29, (#30 + 0) +Counter in file 0 80:30 -> 82:6, #33 +Counter in file 0 82:15 -> 82:28, ((#30 + 0) - #33) +Counter in file 0 83:12 -> 83:25, (((#30 + 0) - #33) - #6) +Counter in file 0 83:29 -> 83:42, ((((#30 + 0) - #33) - #6) - #39) +Counter in file 0 83:42 -> 83:43, (#39 + #40) +Counter in file 0 83:42 -> 83:43, (((((#30 + 0) - #33) - #6) - #39) - #40) +Counter in file 0 83:46 -> 83:60, #48 +Counter in file 0 83:60 -> 83:61, (#43 + #44) +Counter in file 0 83:60 -> 83:61, (#48 - #44) +Counter in file 0 83:61 -> 85:10, #35 +Counter in file 0 85:10 -> 85:11, #36 +Counter in file 0 86:9 -> 86:23, (#35 + #36) +Counter in file 0 88:13 -> 90:15, #6 +Counter in file 0 93:9 -> 93:10, (#9 + (#10 + #11)) +Counter in file 0 93:16 -> 93:29, ((#33 + (#35 + #36)) + 0) +Counter in file 0 93:30 -> 95:6, #9 +Counter in file 0 95:15 -> 95:28, ((#33 + (#35 + #36)) - #9) +Counter in file 0 96:12 -> 96:25, (((#33 + (#35 + #36)) - #9) - #5) +Counter in file 0 96:29 -> 96:42, ((((#33 + (#35 + #36)) - #9) - #5) - #45) +Counter in file 0 96:42 -> 96:43, (#45 + #46) +Counter in file 0 96:42 -> 96:43, (((((#33 + (#35 + #36)) - #9) - #5) - #45) - #46) +Counter in file 0 96:46 -> 96:60, #51 +Counter in file 0 96:60 -> 96:61, (#49 + #50) +Counter in file 0 96:60 -> 96:61, (#51 - #50) +Counter in file 0 96:61 -> 98:10, #10 +Counter in file 0 98:10 -> 98:11, #11 +Counter in file 0 99:9 -> 99:23, (#10 + #11) +Counter in file 0 101:9 -> 101:15, #5 +Counter in file 0 103:1 -> 103:2, ((#9 + (#10 + #11)) + (((#5 + #6) + (#7 + #8)) + (((#2 + 0) - #3) - #4))) Emitting segments for file: ../coverage/conditions.rs Combined regions: 4:9 -> 4:26 (count=1) @@ -89,7 +108,7 @@ Combined regions: 24:8 -> 24:12 (count=1) 24:13 -> 26:6 (count=1) 28:8 -> 28:21 (count=1) - 29:9 -> 29:23 (count=1) + 28:22 -> 30:6 (count=1) 30:15 -> 30:28 (count=0) 31:12 -> 31:25 (count=0) 31:29 -> 31:42 (count=0) @@ -100,36 +119,53 @@ Combined regions: 33:10 -> 33:11 (count=0) 34:9 -> 34:23 (count=0) 36:9 -> 36:15 (count=0) - 39:9 -> 39:26 (count=1) - 40:8 -> 40:12 (count=1) - 40:13 -> 42:6 (count=1) - 44:9 -> 44:10 (count=0) - 44:16 -> 44:29 (count=1) - 45:9 -> 45:23 (count=0) - 46:15 -> 46:28 (count=1) - 47:12 -> 47:25 (count=0) - 47:29 -> 47:42 (count=0) - 47:42 -> 47:43 (count=0) - 47:46 -> 47:60 (count=0) - 47:60 -> 47:61 (count=0) - 47:61 -> 49:10 (count=0) - 49:10 -> 49:11 (count=0) - 50:9 -> 50:23 (count=0) - 52:13 -> 54:15 (count=1) - 57:9 -> 57:10 (count=0) - 57:16 -> 57:29 (count=0) - 58:9 -> 58:23 (count=0) - 59:15 -> 59:28 (count=0) - 60:12 -> 60:25 (count=0) - 60:29 -> 60:42 (count=0) - 60:42 -> 60:43 (count=0) - 60:46 -> 60:60 (count=0) - 60:60 -> 60:61 (count=0) - 60:61 -> 62:10 (count=0) - 62:10 -> 62:11 (count=0) - 63:9 -> 63:23 (count=0) - 65:9 -> 65:15 (count=0) - 67:1 -> 67:2 (count=1) + 39:8 -> 39:12 (count=1) + 52:13 -> 52:30 (count=1) + 53:12 -> 53:16 (count=1) + 53:17 -> 55:10 (count=1) + 57:12 -> 57:25 (count=1) + 57:26 -> 59:10 (count=1) + 65:17 -> 65:30 (count=0) + 66:16 -> 66:29 (count=0) + 66:33 -> 66:46 (count=0) + 66:46 -> 66:47 (count=0) + 66:50 -> 66:64 (count=0) + 66:64 -> 66:65 (count=0) + 66:65 -> 68:14 (count=0) + 68:14 -> 68:15 (count=0) + 69:13 -> 69:27 (count=0) + 71:13 -> 71:19 (count=0) + 73:6 -> 73:7 (count=1) + 75:9 -> 75:26 (count=1) + 76:8 -> 76:12 (count=1) + 76:13 -> 78:6 (count=1) + 80:9 -> 80:10 (count=0) + 80:16 -> 80:29 (count=1) + 80:30 -> 82:6 (count=0) + 82:15 -> 82:28 (count=1) + 83:12 -> 83:25 (count=0) + 83:29 -> 83:42 (count=0) + 83:42 -> 83:43 (count=0) + 83:46 -> 83:60 (count=0) + 83:60 -> 83:61 (count=0) + 83:61 -> 85:10 (count=0) + 85:10 -> 85:11 (count=0) + 86:9 -> 86:23 (count=0) + 88:13 -> 90:15 (count=1) + 93:9 -> 93:10 (count=0) + 93:16 -> 93:29 (count=0) + 93:30 -> 95:6 (count=0) + 95:15 -> 95:28 (count=0) + 96:12 -> 96:25 (count=0) + 96:29 -> 96:42 (count=0) + 96:42 -> 96:43 (count=0) + 96:46 -> 96:60 (count=0) + 96:60 -> 96:61 (count=0) + 96:61 -> 98:10 (count=0) + 98:10 -> 98:11 (count=0) + 99:9 -> 99:23 (count=0) + 101:9 -> 101:15 (count=0) + 103:1 -> 103:2 (count=1) Segment at 4:9 (count = 1), RegionEntry Segment at 4:26 (count = 0), Skipped Segment at 5:8 (count = 1), RegionEntry @@ -166,8 +202,8 @@ Segment at 24:13 (count = 1), RegionEntry Segment at 26:6 (count = 0), Skipped Segment at 28:8 (count = 1), RegionEntry Segment at 28:21 (count = 0), Skipped -Segment at 29:9 (count = 1), RegionEntry -Segment at 29:23 (count = 0), Skipped +Segment at 28:22 (count = 1), RegionEntry +Segment at 30:6 (count = 0), Skipped Segment at 30:15 (count = 0), RegionEntry Segment at 30:28 (count = 0), Skipped Segment at 31:12 (count = 0), RegionEntry @@ -184,55 +220,85 @@ Segment at 34:9 (count = 0), RegionEntry Segment at 34:23 (count = 0), Skipped Segment at 36:9 (count = 0), RegionEntry Segment at 36:15 (count = 0), Skipped -Segment at 39:9 (count = 1), RegionEntry -Segment at 39:26 (count = 0), Skipped -Segment at 40:8 (count = 1), RegionEntry -Segment at 40:12 (count = 0), Skipped -Segment at 40:13 (count = 1), RegionEntry -Segment at 42:6 (count = 0), Skipped -Segment at 44:9 (count = 0), RegionEntry -Segment at 44:10 (count = 0), Skipped -Segment at 44:16 (count = 1), RegionEntry -Segment at 44:29 (count = 0), Skipped -Segment at 45:9 (count = 0), RegionEntry -Segment at 45:23 (count = 0), Skipped -Segment at 46:15 (count = 1), RegionEntry -Segment at 46:28 (count = 0), Skipped -Segment at 47:12 (count = 0), RegionEntry -Segment at 47:25 (count = 0), Skipped -Segment at 47:29 (count = 0), RegionEntry -Segment at 47:42 (count = 0), RegionEntry -Segment at 47:43 (count = 0), Skipped -Segment at 47:46 (count = 0), RegionEntry -Segment at 47:60 (count = 0), RegionEntry -Segment at 47:61 (count = 0), RegionEntry -Segment at 49:10 (count = 0), RegionEntry -Segment at 49:11 (count = 0), Skipped -Segment at 50:9 (count = 0), RegionEntry -Segment at 50:23 (count = 0), Skipped +Segment at 39:8 (count = 1), RegionEntry +Segment at 39:12 (count = 0), Skipped Segment at 52:13 (count = 1), RegionEntry -Segment at 54:15 (count = 0), Skipped -Segment at 57:9 (count = 0), RegionEntry -Segment at 57:10 (count = 0), Skipped -Segment at 57:16 (count = 0), RegionEntry -Segment at 57:29 (count = 0), Skipped -Segment at 58:9 (count = 0), RegionEntry -Segment at 58:23 (count = 0), Skipped -Segment at 59:15 (count = 0), RegionEntry -Segment at 59:28 (count = 0), Skipped -Segment at 60:12 (count = 0), RegionEntry -Segment at 60:25 (count = 0), Skipped -Segment at 60:29 (count = 0), RegionEntry -Segment at 60:42 (count = 0), RegionEntry -Segment at 60:43 (count = 0), Skipped -Segment at 60:46 (count = 0), RegionEntry -Segment at 60:60 (count = 0), RegionEntry -Segment at 60:61 (count = 0), RegionEntry -Segment at 62:10 (count = 0), RegionEntry -Segment at 62:11 (count = 0), Skipped -Segment at 63:9 (count = 0), RegionEntry -Segment at 63:23 (count = 0), Skipped -Segment at 65:9 (count = 0), RegionEntry -Segment at 65:15 (count = 0), Skipped -Segment at 67:1 (count = 1), RegionEntry -Segment at 67:2 (count = 0), Skipped +Segment at 52:30 (count = 0), Skipped +Segment at 53:12 (count = 1), RegionEntry +Segment at 53:16 (count = 0), Skipped +Segment at 53:17 (count = 1), RegionEntry +Segment at 55:10 (count = 0), Skipped +Segment at 57:12 (count = 1), RegionEntry +Segment at 57:25 (count = 0), Skipped +Segment at 57:26 (count = 1), RegionEntry +Segment at 59:10 (count = 0), Skipped +Segment at 65:17 (count = 0), RegionEntry +Segment at 65:30 (count = 0), Skipped +Segment at 66:16 (count = 0), RegionEntry +Segment at 66:29 (count = 0), Skipped +Segment at 66:33 (count = 0), RegionEntry +Segment at 66:46 (count = 0), RegionEntry +Segment at 66:47 (count = 0), Skipped +Segment at 66:50 (count = 0), RegionEntry +Segment at 66:64 (count = 0), RegionEntry +Segment at 66:65 (count = 0), RegionEntry +Segment at 68:14 (count = 0), RegionEntry +Segment at 68:15 (count = 0), Skipped +Segment at 69:13 (count = 0), RegionEntry +Segment at 69:27 (count = 0), Skipped +Segment at 71:13 (count = 0), RegionEntry +Segment at 71:19 (count = 0), Skipped +Segment at 73:6 (count = 1), RegionEntry +Segment at 73:7 (count = 0), Skipped +Segment at 75:9 (count = 1), RegionEntry +Segment at 75:26 (count = 0), Skipped +Segment at 76:8 (count = 1), RegionEntry +Segment at 76:12 (count = 0), Skipped +Segment at 76:13 (count = 1), RegionEntry +Segment at 78:6 (count = 0), Skipped +Segment at 80:9 (count = 0), RegionEntry +Segment at 80:10 (count = 0), Skipped +Segment at 80:16 (count = 1), RegionEntry +Segment at 80:29 (count = 0), Skipped +Segment at 80:30 (count = 0), RegionEntry +Segment at 82:6 (count = 0), Skipped +Segment at 82:15 (count = 1), RegionEntry +Segment at 82:28 (count = 0), Skipped +Segment at 83:12 (count = 0), RegionEntry +Segment at 83:25 (count = 0), Skipped +Segment at 83:29 (count = 0), RegionEntry +Segment at 83:42 (count = 0), RegionEntry +Segment at 83:43 (count = 0), Skipped +Segment at 83:46 (count = 0), RegionEntry +Segment at 83:60 (count = 0), RegionEntry +Segment at 83:61 (count = 0), RegionEntry +Segment at 85:10 (count = 0), RegionEntry +Segment at 85:11 (count = 0), Skipped +Segment at 86:9 (count = 0), RegionEntry +Segment at 86:23 (count = 0), Skipped +Segment at 88:13 (count = 1), RegionEntry +Segment at 90:15 (count = 0), Skipped +Segment at 93:9 (count = 0), RegionEntry +Segment at 93:10 (count = 0), Skipped +Segment at 93:16 (count = 0), RegionEntry +Segment at 93:29 (count = 0), Skipped +Segment at 93:30 (count = 0), RegionEntry +Segment at 95:6 (count = 0), Skipped +Segment at 95:15 (count = 0), RegionEntry +Segment at 95:28 (count = 0), Skipped +Segment at 96:12 (count = 0), RegionEntry +Segment at 96:25 (count = 0), Skipped +Segment at 96:29 (count = 0), RegionEntry +Segment at 96:42 (count = 0), RegionEntry +Segment at 96:43 (count = 0), Skipped +Segment at 96:46 (count = 0), RegionEntry +Segment at 96:60 (count = 0), RegionEntry +Segment at 96:61 (count = 0), RegionEntry +Segment at 98:10 (count = 0), RegionEntry +Segment at 98:11 (count = 0), Skipped +Segment at 99:9 (count = 0), RegionEntry +Segment at 99:23 (count = 0), Skipped +Segment at 101:9 (count = 0), RegionEntry +Segment at 101:15 (count = 0), Skipped +Segment at 103:1 (count = 1), RegionEntry +Segment at 103:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.inner_items.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.inner_items.txt index 65cd6481af4cc..e4dfae7681783 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.inner_items.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.inner_items.txt @@ -1,7 +1,4 @@ -Counter in file 0 19:13 -> 19:18, #1 -Counter in file 0 20:13 -> 20:14, #2 -Counter in file 0 20:17 -> 20:22, (#1 + 0) -Counter in file 0 21:9 -> 22:6, (#2 + 0) +Counter in file 0 19:13 -> 22:6, #1 Counter in file 0 7:9 -> 9:26, #1 Counter in file 0 10:8 -> 10:15, (#1 + 0) Counter in file 0 10:16 -> 12:6, #2 @@ -11,21 +8,16 @@ Counter in file 0 48:16 -> 50:6, #3 Counter in file 0 50:6 -> 50:7, ((#2 + (#1 - #2)) - #3) Counter in file 0 52:9 -> 57:2, (#3 + ((#2 + (#1 - #2)) - #3)) Counter in file 0 33:42 -> 36:10, #1 -Counter in file 0 41:37 -> 41:41, #1 -Counter in file 0 42:13 -> 43:10, #2 +Counter in file 0 40:45 -> 43:10, #1 Emitting segments for file: ../coverage/inner_items.rs Combined regions: 7:9 -> 9:26 (count=1) 10:8 -> 10:15 (count=1) 10:16 -> 12:6 (count=1) 12:6 -> 12:7 (count=0) - 19:13 -> 19:18 (count=3) - 20:13 -> 20:14 (count=3) - 20:17 -> 20:22 (count=3) - 21:9 -> 22:6 (count=3) + 19:13 -> 22:6 (count=3) 33:42 -> 36:10 (count=1) - 41:37 -> 41:41 (count=1) - 42:13 -> 43:10 (count=1) + 40:45 -> 43:10 (count=1) 48:8 -> 48:15 (count=1) 48:16 -> 50:6 (count=1) 50:6 -> 50:7 (count=0) @@ -38,18 +30,10 @@ Segment at 10:16 (count = 1), RegionEntry Segment at 12:6 (count = 0), RegionEntry Segment at 12:7 (count = 0), Skipped Segment at 19:13 (count = 3), RegionEntry -Segment at 19:18 (count = 0), Skipped -Segment at 20:13 (count = 3), RegionEntry -Segment at 20:14 (count = 0), Skipped -Segment at 20:17 (count = 3), RegionEntry -Segment at 20:22 (count = 0), Skipped -Segment at 21:9 (count = 3), RegionEntry Segment at 22:6 (count = 0), Skipped Segment at 33:42 (count = 1), RegionEntry Segment at 36:10 (count = 0), Skipped -Segment at 41:37 (count = 1), RegionEntry -Segment at 41:41 (count = 0), Skipped -Segment at 42:13 (count = 1), RegionEntry +Segment at 40:45 (count = 1), RegionEntry Segment at 43:10 (count = 0), Skipped Segment at 48:8 (count = 1), RegionEntry Segment at 48:15 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.nested_loops.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.nested_loops.txt index f503007353319..f8e504c56c48e 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.nested_loops.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.nested_loops.txt @@ -1,21 +1,20 @@ Counter in file 0 2:9 -> 3:27, #1 -Counter in file 0 5:19 -> 5:32, (#1 + #2) -Counter in file 0 6:13 -> 7:24, ((#1 + #2) - #3) -Counter in file 0 8:13 -> 8:14, ((((#1 + #2) - #3) + (#5 + #6)) - #7) -Counter in file 0 8:18 -> 8:23, (((#1 + #2) - #3) + (#5 + #6)) -Counter in file 0 9:16 -> 9:22, (((((#1 + #2) - #3) + (#5 + #6)) - #7) + 0) -Counter in file 0 10:17 -> 10:22, #8 -Counter in file 0 12:13 -> 12:19, #9 -Counter in file 0 13:13 -> 13:19, #10 -Counter in file 0 14:16 -> 14:22, (#10 + 0) -Counter in file 0 15:17 -> 16:27, #11 -Counter in file 0 17:21 -> 17:33, #4 -Counter in file 0 19:21 -> 21:14, #5 -Counter in file 0 21:14 -> 21:15, #6 -Counter in file 0 22:10 -> 22:11, (#5 + #6) -Counter in file 0 23:9 -> 23:23, #2 -Counter in file 0 24:6 -> 24:7, #3 -Counter in file 0 25:1 -> 25:2, (#4 + #3) +Counter in file 0 5:19 -> 5:32, (#1 + (#2 + #3)) +Counter in file 0 6:13 -> 7:24, ((#1 + (#2 + #3)) - #4) +Counter in file 0 8:13 -> 8:14, ((((#1 + (#2 + #3)) - #4) + (#6 + #7)) - #3) +Counter in file 0 8:18 -> 8:23, (((#1 + (#2 + #3)) - #4) + (#6 + #7)) +Counter in file 0 9:16 -> 9:22, (((((#1 + (#2 + #3)) - #4) + (#6 + #7)) - #3) + 0) +Counter in file 0 10:17 -> 10:22, #2 +Counter in file 0 12:13 -> 13:19, (((((#1 + (#2 + #3)) - #4) + (#6 + #7)) - #3) - #2) +Counter in file 0 14:16 -> 14:22, ((((((#1 + (#2 + #3)) - #4) + (#6 + #7)) - #3) - #2) + 0) +Counter in file 0 15:17 -> 16:27, ((((((#1 + (#2 + #3)) - #4) + (#6 + #7)) - #3) - #2) - #7) +Counter in file 0 17:21 -> 17:33, #5 +Counter in file 0 18:24 -> 21:14, #6 +Counter in file 0 21:14 -> 21:15, #7 +Counter in file 0 22:10 -> 22:11, (#6 + #7) +Counter in file 0 23:9 -> 23:23, (#2 + #3) +Counter in file 0 24:6 -> 24:7, #4 +Counter in file 0 25:1 -> 25:2, (#5 + #4) Emitting segments for file: ../coverage/nested_loops.rs Combined regions: 2:9 -> 3:27 (count=1) @@ -25,12 +24,11 @@ Combined regions: 8:18 -> 8:23 (count=3) 9:16 -> 9:22 (count=3) 10:17 -> 10:22 (count=0) - 12:13 -> 12:19 (count=3) - 13:13 -> 13:19 (count=3) + 12:13 -> 13:19 (count=3) 14:16 -> 14:22 (count=3) 15:17 -> 16:27 (count=1) 17:21 -> 17:33 (count=1) - 19:21 -> 21:14 (count=0) + 18:24 -> 21:14 (count=0) 21:14 -> 21:15 (count=2) 22:10 -> 22:11 (count=2) 23:9 -> 23:23 (count=0) @@ -51,8 +49,6 @@ Segment at 9:22 (count = 0), Skipped Segment at 10:17 (count = 0), RegionEntry Segment at 10:22 (count = 0), Skipped Segment at 12:13 (count = 3), RegionEntry -Segment at 12:19 (count = 0), Skipped -Segment at 13:13 (count = 3), RegionEntry Segment at 13:19 (count = 0), Skipped Segment at 14:16 (count = 3), RegionEntry Segment at 14:22 (count = 0), Skipped @@ -60,7 +56,7 @@ Segment at 15:17 (count = 1), RegionEntry Segment at 16:27 (count = 0), Skipped Segment at 17:21 (count = 1), RegionEntry Segment at 17:33 (count = 0), Skipped -Segment at 19:21 (count = 0), RegionEntry +Segment at 18:24 (count = 0), RegionEntry Segment at 21:14 (count = 2), RegionEntry Segment at 21:15 (count = 0), Skipped Segment at 22:10 (count = 2), RegionEntry diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.overflow.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.overflow.txt new file mode 100644 index 0000000000000..8696e102b568e --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.overflow.txt @@ -0,0 +1,53 @@ +Counter in file 0 16:9 -> 16:27, #1 +Counter in file 0 17:11 -> 17:24, (#1 + (#2 + (#3 + #4))) +Counter in file 0 18:12 -> 18:26, ((#1 + (#2 + (#3 + #4))) - #5) +Counter in file 0 18:27 -> 21:10, #2 +Counter in file 0 21:19 -> 21:32, (((#1 + (#2 + (#3 + #4))) - #5) - #2) +Counter in file 0 21:33 -> 24:10, #3 +Counter in file 0 24:10 -> 24:11, #4 +Counter in file 0 24:10 -> 24:11, (#3 + #4) +Counter in file 0 25:9 -> 25:23, (#2 + (#3 + #4)) +Counter in file 0 27:5 -> 28:2, #5 +Counter in file 0 5:8 -> 5:18, #1 +Counter in file 0 5:19 -> 7:6, #2 +Counter in file 0 7:6 -> 7:7, (#1 - #2) +Counter in file 0 8:9 -> 13:2, (#2 + (#1 - #2)) +Emitting segments for file: ../coverage/overflow.rs +Combined regions: + 5:8 -> 5:18 (count=4) + 5:19 -> 7:6 (count=1) + 7:6 -> 7:7 (count=3) + 8:9 -> 13:2 (count=4) + 16:9 -> 16:27 (count=1) + 17:11 -> 17:24 (count=10) + 18:12 -> 18:26 (count=10) + 18:27 -> 21:10 (count=0) + 21:19 -> 21:32 (count=10) + 21:33 -> 24:10 (count=3) + 24:10 -> 24:11 (count=15) + 25:9 -> 25:23 (count=9) + 27:5 -> 28:2 (count=0) +Segment at 5:8 (count = 4), RegionEntry +Segment at 5:18 (count = 0), Skipped +Segment at 5:19 (count = 1), RegionEntry +Segment at 7:6 (count = 3), RegionEntry +Segment at 7:7 (count = 0), Skipped +Segment at 8:9 (count = 4), RegionEntry +Segment at 13:2 (count = 0), Skipped +Segment at 16:9 (count = 1), RegionEntry +Segment at 16:27 (count = 0), Skipped +Segment at 17:11 (count = 10), RegionEntry +Segment at 17:24 (count = 0), Skipped +Segment at 18:12 (count = 10), RegionEntry +Segment at 18:26 (count = 0), Skipped +Segment at 18:27 (count = 0), RegionEntry +Segment at 21:10 (count = 0), Skipped +Segment at 21:19 (count = 10), RegionEntry +Segment at 21:32 (count = 0), Skipped +Segment at 21:33 (count = 3), RegionEntry +Segment at 24:10 (count = 15), RegionEntry +Segment at 24:11 (count = 0), Skipped +Segment at 25:9 (count = 9), RegionEntry +Segment at 25:23 (count = 0), Skipped +Segment at 27:5 (count = 0), RegionEntry +Segment at 28:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.panic_unwind.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.panic_unwind.txt new file mode 100644 index 0000000000000..9602ff1a985aa --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.panic_unwind.txt @@ -0,0 +1,50 @@ +Counter in file 0 14:9 -> 14:27, #1 +Counter in file 0 15:11 -> 15:24, (#1 + (#2 + (#3 + #4))) +Counter in file 0 16:12 -> 16:26, ((#1 + (#2 + (#3 + #4))) - #5) +Counter in file 0 16:27 -> 18:10, #2 +Counter in file 0 18:19 -> 18:32, (((#1 + (#2 + (#3 + #4))) - #5) - #2) +Counter in file 0 18:33 -> 20:10, #3 +Counter in file 0 20:10 -> 20:11, #4 +Counter in file 0 20:10 -> 20:11, (#3 + #4) +Counter in file 0 21:9 -> 21:23, (#2 + (#3 + #4)) +Counter in file 0 23:5 -> 24:2, #5 +Counter in file 0 5:8 -> 5:20, #1 +Counter in file 0 6:9 -> 7:26, #2 +Counter in file 0 8:12 -> 11:2, (#1 - #2) +Emitting segments for file: ../coverage/panic_unwind.rs +Combined regions: + 5:8 -> 5:20 (count=4) + 6:9 -> 7:26 (count=1) + 8:12 -> 11:2 (count=3) + 14:9 -> 14:27 (count=1) + 15:11 -> 15:24 (count=10) + 16:12 -> 16:26 (count=10) + 16:27 -> 18:10 (count=0) + 18:19 -> 18:32 (count=10) + 18:33 -> 20:10 (count=3) + 20:10 -> 20:11 (count=15) + 21:9 -> 21:23 (count=9) + 23:5 -> 24:2 (count=0) +Segment at 5:8 (count = 4), RegionEntry +Segment at 5:20 (count = 0), Skipped +Segment at 6:9 (count = 1), RegionEntry +Segment at 7:26 (count = 0), Skipped +Segment at 8:12 (count = 3), RegionEntry +Segment at 11:2 (count = 0), Skipped +Segment at 14:9 (count = 1), RegionEntry +Segment at 14:27 (count = 0), Skipped +Segment at 15:11 (count = 10), RegionEntry +Segment at 15:24 (count = 0), Skipped +Segment at 16:12 (count = 10), RegionEntry +Segment at 16:26 (count = 0), Skipped +Segment at 16:27 (count = 0), RegionEntry +Segment at 18:10 (count = 0), Skipped +Segment at 18:19 (count = 10), RegionEntry +Segment at 18:32 (count = 0), Skipped +Segment at 18:33 (count = 3), RegionEntry +Segment at 20:10 (count = 15), RegionEntry +Segment at 20:11 (count = 0), Skipped +Segment at 21:9 (count = 9), RegionEntry +Segment at 21:23 (count = 0), Skipped +Segment at 23:5 (count = 0), RegionEntry +Segment at 24:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.partial_eq.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.partial_eq.txt index 2b9285202f97f..329e0f3889a98 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.partial_eq.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.partial_eq.txt @@ -1,28 +1,28 @@ -Counter in file 0 4:32 -> 4:33, (#3 + (#1 + #2)) Counter in file 0 4:48 -> 4:49, ((#1 + #2) + ((#3 + #4) + ((#5 + #6) + #7))) +Counter in file 0 7:5 -> 7:6, #1 Counter in file 0 21:11 -> 26:2, #1 -Counter in file 0 8:5 -> 8:17, #1 -Counter in file 0 8:5 -> 8:17, #1 Counter in file 0 4:39 -> 4:40, #1 Counter in file 0 4:48 -> 4:49, (#1 + 0) +Counter in file 0 7:5 -> 7:6, #1 Counter in file 0 4:39 -> 4:40, #1 Counter in file 0 4:48 -> 4:49, (#1 + 0) -Counter in file 0 8:5 -> 8:17, #1 Counter in file 0 4:32 -> 4:33, ((#4 + #5) + #6) +Counter in file 0 7:5 -> 7:6, #1 Counter in file 0 4:53 -> 4:54, (#1 + (#2 + (#3 + #4))) +Counter in file 0 8:5 -> 8:17, #1 Counter in file 0 13:9 -> 18:6, #1 +Counter in file 0 7:5 -> 7:6, #1 Counter in file 0 4:39 -> 4:40, #1 Counter in file 0 4:48 -> 4:49, (#1 + 0) -Counter in file 0 7:5 -> 7:6, #1 Counter in file 0 4:10 -> 4:15, #1 +Counter in file 0 8:5 -> 8:17, #1 Counter in file 0 4:35 -> 4:37, #1 -Counter in file 0 7:5 -> 7:6, #1 -Counter in file 0 7:5 -> 7:6, #1 -Counter in file 0 4:17 -> 4:22, #1 Counter in file 0 8:5 -> 8:17, #1 +Counter in file 0 8:5 -> 8:17, #1 +Counter in file 0 4:17 -> 4:22, #1 Counter in file 0 4:39 -> 4:40, #1 Counter in file 0 4:48 -> 4:49, (#1 + 0) -Counter in file 0 7:5 -> 7:6, #1 +Counter in file 0 4:32 -> 4:33, (#3 + (#1 + #2)) Emitting segments for file: ../coverage/partial_eq.rs Combined regions: 4:17 -> 4:22 (count=2) diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.simple_loop.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.simple_loop.txt index 255173e5534d1..6ea09248d65ca 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.simple_loop.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.simple_loop.txt @@ -3,10 +3,10 @@ Counter in file 0 12:9 -> 12:16, (#1 + 0) Counter in file 0 13:5 -> 18:6, #2 Counter in file 0 18:6 -> 18:7, (#1 - #2) Counter in file 0 23:13 -> 25:14, ((#2 + (#1 - #2)) + #3) -Counter in file 0 27:13 -> 27:18, #4 +Counter in file 0 27:13 -> 27:18, (((#2 + (#1 - #2)) + #3) - #3) Counter in file 0 30:9 -> 32:10, #3 Counter in file 0 34:6 -> 34:7, (#2 + (#1 - #2)) -Counter in file 0 35:1 -> 35:2, (#4 + 0) +Counter in file 0 35:1 -> 35:2, ((((#2 + (#1 - #2)) + #3) - #3) + 0) Emitting segments for file: ../coverage/simple_loop.rs Combined regions: 7:9 -> 9:26 (count=1) diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.try_error_result.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.try_error_result.txt index a317cd792910d..5b7f5496af819 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.try_error_result.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.try_error_result.txt @@ -1,12 +1,12 @@ Counter in file 0 13:9 -> 14:23, #1 Counter in file 0 17:9 -> 17:10, ((#1 + (#2 + #3)) - #4) Counter in file 0 19:9 -> 19:14, (#1 + (#2 + #3)) -Counter in file 0 21:9 -> 25:26, #8 -Counter in file 0 27:13 -> 27:41, #9 +Counter in file 0 21:9 -> 25:26, (((#1 + (#2 + #3)) - #4) + 0) +Counter in file 0 27:13 -> 27:41, #8 Counter in file 0 27:41 -> 27:42, #5 -Counter in file 0 28:13 -> 28:42, (#9 - #5) +Counter in file 0 28:13 -> 28:42, (#8 - #5) Counter in file 0 28:42 -> 28:43, #6 -Counter in file 0 32:13 -> 32:42, (#8 - #9) +Counter in file 0 32:13 -> 32:42, (((#1 + (#2 + #3)) - #4) - #8) Counter in file 0 32:42 -> 32:43, #7 Counter in file 0 33:10 -> 33:11, #2 Counter in file 0 33:10 -> 33:11, #3 diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while_early_ret.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while_early_ret.txt index f541baec50c0b..7e79a8f00e1a6 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while_early_ret.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while_early_ret.txt @@ -1,7 +1,7 @@ Counter in file 0 5:9 -> 5:27, #1 Counter in file 0 7:9 -> 9:10, (#1 + #2) Counter in file 0 12:13 -> 14:14, ((#1 + #2) - #3) -Counter in file 0 18:21 -> 20:22, #6 +Counter in file 0 18:21 -> 20:22, (((#1 + #2) - #3) - #2) Counter in file 0 22:21 -> 22:27, #4 Counter in file 0 26:21 -> 26:27, #5 Counter in file 0 30:9 -> 32:10, #2 diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.yield.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.yield.txt new file mode 100644 index 0000000000000..a107535821164 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.yield.txt @@ -0,0 +1,90 @@ +Counter in file 0 8:9 -> 8:22, #1 +Counter in file 0 13:11 -> 14:35, (#1 + 0) +Counter in file 0 14:39 -> 14:41, #4 +Counter in file 0 15:14 -> 15:52, (#2 + #3) +Counter in file 0 17:11 -> 17:46, (#4 + 0) +Counter in file 0 18:34 -> 18:39, (#4 - #5) +Counter in file 0 18:44 -> 18:46, ((#4 - #5) - #6) +Counter in file 0 19:14 -> 19:52, (#5 + #6) +Counter in file 0 22:9 -> 22:22, (((#4 - #5) - #6) + 0) +Counter in file 0 29:11 -> 30:35, (((#4 - #5) - #6) + 0) +Counter in file 0 30:39 -> 30:41, #9 +Counter in file 0 31:14 -> 31:52, (#7 + #8) +Counter in file 0 33:11 -> 34:35, (#9 + 0) +Counter in file 0 34:39 -> 34:41, #12 +Counter in file 0 35:14 -> 35:52, (#10 + #11) +Counter in file 0 37:1 -> 37:2, (#12 + 0) +Counter in file 0 9:9 -> 9:16, #1 +Counter in file 0 10:16 -> 11:6, #2 +Counter in file 0 23:9 -> 23:16, #1 +Counter in file 0 24:9 -> 24:16, #2 +Counter in file 0 25:9 -> 25:16, #3 +Counter in file 0 26:16 -> 27:6, #4 +Emitting segments for file: ../coverage/yield.rs +Combined regions: + 8:9 -> 8:22 (count=1) + 9:9 -> 9:16 (count=1) + 10:16 -> 11:6 (count=1) + 13:11 -> 14:35 (count=1) + 14:39 -> 14:41 (count=1) + 15:14 -> 15:52 (count=0) + 17:11 -> 17:46 (count=1) + 18:34 -> 18:39 (count=1) + 18:44 -> 18:46 (count=1) + 19:14 -> 19:52 (count=0) + 22:9 -> 22:22 (count=1) + 23:9 -> 23:16 (count=1) + 24:9 -> 24:16 (count=1) + 25:9 -> 25:16 (count=0) + 26:16 -> 27:6 (count=0) + 29:11 -> 30:35 (count=1) + 30:39 -> 30:41 (count=1) + 31:14 -> 31:52 (count=0) + 33:11 -> 34:35 (count=1) + 34:39 -> 34:41 (count=1) + 35:14 -> 35:52 (count=0) + 37:1 -> 37:2 (count=1) +Segment at 8:9 (count = 1), RegionEntry +Segment at 8:22 (count = 0), Skipped +Segment at 9:9 (count = 1), RegionEntry +Segment at 9:16 (count = 0), Skipped +Segment at 10:16 (count = 1), RegionEntry +Segment at 11:6 (count = 0), Skipped +Segment at 13:11 (count = 1), RegionEntry +Segment at 14:35 (count = 0), Skipped +Segment at 14:39 (count = 1), RegionEntry +Segment at 14:41 (count = 0), Skipped +Segment at 15:14 (count = 0), RegionEntry +Segment at 15:52 (count = 0), Skipped +Segment at 17:11 (count = 1), RegionEntry +Segment at 17:46 (count = 0), Skipped +Segment at 18:34 (count = 1), RegionEntry +Segment at 18:39 (count = 0), Skipped +Segment at 18:44 (count = 1), RegionEntry +Segment at 18:46 (count = 0), Skipped +Segment at 19:14 (count = 0), RegionEntry +Segment at 19:52 (count = 0), Skipped +Segment at 22:9 (count = 1), RegionEntry +Segment at 22:22 (count = 0), Skipped +Segment at 23:9 (count = 1), RegionEntry +Segment at 23:16 (count = 0), Skipped +Segment at 24:9 (count = 1), RegionEntry +Segment at 24:16 (count = 0), Skipped +Segment at 25:9 (count = 0), RegionEntry +Segment at 25:16 (count = 0), Skipped +Segment at 26:16 (count = 0), RegionEntry +Segment at 27:6 (count = 0), Skipped +Segment at 29:11 (count = 1), RegionEntry +Segment at 30:35 (count = 0), Skipped +Segment at 30:39 (count = 1), RegionEntry +Segment at 30:41 (count = 0), Skipped +Segment at 31:14 (count = 0), RegionEntry +Segment at 31:52 (count = 0), Skipped +Segment at 33:11 (count = 1), RegionEntry +Segment at 34:35 (count = 0), Skipped +Segment at 34:39 (count = 1), RegionEntry +Segment at 34:41 (count = 0), Skipped +Segment at 35:14 (count = 0), RegionEntry +Segment at 35:52 (count = 0), Skipped +Segment at 37:1 (count = 1), RegionEntry +Segment at 37:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/Makefile b/src/test/run-make-fulldeps/coverage-spanview-base/Makefile index 9f9440340e0ed..c62cbc1c91f79 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/Makefile +++ b/src/test/run-make-fulldeps/coverage-spanview-base/Makefile @@ -43,6 +43,9 @@ endif %: $(SOURCEDIR)/%.rs # Compile the test program with coverage instrumentation and generate relevant MIR. $(RUSTC) $(SOURCEDIR)/$@.rs \ + $$( grep -q '^\/\/ require-rust-edition-2018' $(SOURCEDIR)/$@.rs && \ + echo "--edition=2018" \ + ) \ -Zinstrument-coverage \ -Clink-dead-code=$(LINK_DEAD_CODE) \ -Zdump-mir=InstrumentCoverage \ diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..a8227cffc60f6 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,99 @@ + + + + +abort.main - Coverage Spans + + + +
fn main() -> Result<(),u8> { + let @0⦊mut countdown = 10⦉@0; + while @1,2⦊countdown > 0⦉@1,2 { + if @3,5⦊countdown < 5⦉@3,5 @6,8,9⦊{ + might_abort(false); + }⦉@6,8,9@7⦊⦉@7 + @10,11⦊countdown -= 1⦉@10,11; + } + @4⦊Ok(()) +}⦉@4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..daef056a19aa1 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html @@ -0,0 +1,164 @@ + + + + +abort.might_abort - Coverage Spans + + + +
fn might_abort(should_abort: bool) { + if @0⦊should_abort⦉@0 { + @1,3,4,5⦊println!("aborting..."); + panic!("panics and aborts");⦉@1,3,4,5 + } else @2,6,7⦊{ + println!("Don't Panic"); + } +}⦉@2,6,7
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..499825445acea --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,103 @@ + + + + +assert.main - Coverage Spans + + + +
fn main() -> Result<(),u8> { + let @0⦊mut countdown = 10⦉@0; + while @1,2⦊countdown > 0⦉@1,2 { + if @3,5⦊countdown == 1⦉@3,5 @6,8,9⦊{ + might_fail_assert(3); + }⦉@6,8,9 else if @7⦊countdown < 5⦉@7 @10,12,13⦊{ + might_fail_assert(2); + }⦉@10,12,13@11⦊⦉@11@14⦊⦉@14 + @15,16⦊countdown -= 1⦉@15,16; + } + @4⦊Ok(()) +}⦉@4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..98be3485a4179 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html @@ -0,0 +1,97 @@ + + + + +assert.might_fail_assert - Coverage Spans + + + +
fn might_fail_assert(one_plus_one: u32) { + @0,1,2,3,4⦊println!("does 1 + 1 = {}?", one_plus_one);⦉@0,1,2,3,4 + assert_eq!(@0,1,2,3,4⦊1 + 1⦉@0,1,2,3,4, one_plus_one, @5,7,8,9,10,11,12⦊"the argument was wrong"⦉@5,7,8,9,10,11,12); +}@6⦊⦉@6
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..31646f8ce81dc --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,89 @@ + + + + +async.executor-block_on-VTABLE-{closure#0} - Coverage Spans + + + +
{ + @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 + }
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..ddc791f074fbb --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html @@ -0,0 +1,89 @@ + + + + +async.executor-block_on-VTABLE-{closure#1} - Coverage Spans + + + +
{ + @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 + }
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..709b87fc50198 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html @@ -0,0 +1,89 @@ + + + + +async.executor-block_on-VTABLE-{closure#2} - Coverage Spans + + + +
{ + @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 + }
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..abd2621481a35 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html @@ -0,0 +1,75 @@ + + + + +async.executor-block_on-VTABLE-{closure#3} - Coverage Spans + + + +
|_| @0⦊()⦉@0
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..9d71d8ccc6e08 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html @@ -0,0 +1,226 @@ + + + + +async.executor-block_on - Coverage Spans + + + +
pub fn block_on<F: Future>(mut future: F) -> F::Output { + let @0,1,2,3,4,5⦊mut future = unsafe { Pin::new_unchecked(&mut future) }; + + static VTABLE: RawWakerVTable = RawWakerVTable::new( + |_| unimplemented!("clone"), + |_| unimplemented!("wake"), + |_| unimplemented!("wake_by_ref"), + |_| (), + ); + let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; + let mut context = Context::from_waker(&waker)⦉@0,1,2,3,4,5; + + loop { + if let Poll::Ready(@10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17) = @6,7,8,9⦊future.as_mut().poll(&mut context)⦉@6,7,8,9 { + break @10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17; + } + }@11,13⦊⦉@11,13 + }@10,12,14,15,16,17⦊⦉@10,12,14,15,16,17
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..779f67fd7c101 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,75 @@ + + + + +async.f-{closure#0} - Coverage Spans + + + +
{ @0⦊1 }⦉@0
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..050ae67efc98e --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html @@ -0,0 +1,74 @@ + + + + +async.f - Coverage Spans + + + +
async fn f() -> u8 { 1 }@0,1⦊⦉@0,1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..d176a607d3b54 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,75 @@ + + + + +async.foo-{closure#0} - Coverage Spans + + + +
{ @0⦊[false; 10] }⦉@0
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..64eeaefa89468 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html @@ -0,0 +1,74 @@ + + + + +async.foo - Coverage Spans + + + +
async fn foo() -> [bool; 10] { [false; 10] }@0,1⦊⦉@0,1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..4e894eecd16ae --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,80 @@ + + + + +async.g-{closure#0} - Coverage Spans + + + +
@0,2,3⦊{ + match x⦉@0,2,3 { + @16⦊y⦉@16 if @0,2,3⦊f()⦉@0,2,3.await == @9,12,14,15⦊y⦉@9,12,14,15@17⦊⦉@17 => @16⦊()⦉@16, + _ => @1⦊()⦉@1, + } +}@18,19⦊⦉@18,19
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..4788562a9d4fd --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html @@ -0,0 +1,79 @@ + + + + +async.g - Coverage Spans + + + +
pub async fn g(x: u8) { + match x { + y if f().await == y => (), + _ => (), + } +}@0,1⦊⦉@0,1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..de48232efde62 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,80 @@ + + + + +async.h-{closure#0} - Coverage Spans + + + +
@0,2,3⦊{ + match x⦉@0,2,3 { + @17⦊y⦉@17 if @0,2,3⦊foo()⦉@0,2,3.await[@9,12,14,15,16⦊y⦉@9,12,14,15,16]@18⦊⦉@18 => @17⦊()⦉@17, + _ => @1⦊()⦉@1, + } +}@19,20⦊⦉@19,20
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..83b0a3e0d43aa --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html @@ -0,0 +1,79 @@ + + + + +async.h - Coverage Spans + + + +
async fn h(x: usize) { + match x { + y if foo().await[y] => (), + _ => (), + } +}@0,1⦊⦉@0,1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..71397d3962539 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,82 @@ + + + + +async.i-{closure#0} - Coverage Spans + + + +
@0,2,3⦊{ + match x⦉@0,2,3 { + @17⦊y⦉@17 if @0,2,3⦊f()⦉@0,2,3.await == @9,12,14,15,16⦊y + 1⦉@9,12,14,15,16@18⦊⦉@18 => @17⦊()⦉@17, + _ => @1⦊()⦉@1, + } +}@19,20⦊⦉@19,20
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..55efca7448176 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html @@ -0,0 +1,79 @@ + + + + +async.i - Coverage Spans + + + +
async fn i(x: u8) { + match x { + y if f().await == y + 1 => (), + _ => (), + } +}@0,1⦊⦉@0,1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..2f14339d9e95b --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,133 @@ + + + + +async.main - Coverage Spans + + + +
fn main() @0,1,2,3,4,5,6,7,8,9⦊{ + let _ = g(10); + let _ = h(9); + let mut future = Box::pin(i(8)); + executor::block_on(future.as_mut()); +}⦉@0,1,2,3,4,5,6,7,8,9
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html index cda1040c29114..09adc12cefdb2 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html @@ -87,10 +87,12 @@ let @25⦊x⦉@25 = if @4⦊countdown > 7⦉@4 { - @8⦊countdown -= 4; - B⦉@8 + @5,7,8⦊countdown -= 4; + B⦉@5,7,8 } else if @6⦊countdown > 2⦉@6 { @@ -106,10 +108,12 @@ }⦉@20,22@21⦊⦉@21 - @24⦊countdown -= 5; - countdown⦉@24 + @23,24⦊countdown -= 5; + countdown⦉@23,24 } else { @10⦊return⦉@10; }; @@ -129,9 +133,15 @@ if @29⦊countdown > 7⦉@29 { - @33⦊countdown -= 4⦉@33; - } else if @29⦊countdown > 7⦉@29 @30,32,33⦊{ + countdown -= 4; + }⦉@30,32,33 else if @31⦊countdown > 2⦉@31 { if }⦉@45,47@46⦊⦉@46 - @49⦊countdown -= 5⦉@49; + @48,49⦊countdown -= 5⦉@48,49; } else { @35⦊return⦉@35; } - let @50⦊mut countdown = 0⦉@50; - if @50⦊true⦉@50 @51,53⦊{ - countdown = 1; - }⦉@51,53@52⦊⦉@52 + if @50⦊true⦉@50 { + // Demonstrate the difference with `TerminatorKind::Assert` as of 2020-11-15. Assert is no + // longer treated as a `BasicCoverageBlock` terminator, which changed the coverage region, + // for the executed `then` block above, to include the closing brace on line 30. That + // changed the line count, but the coverage code region (for the `else if` condition) is + // still valid. + // + // Note that `if` (then) and `else` blocks include the closing brace in their coverage + // code regions when the last line in the block ends in a semicolon, because the Rust + // compiler inserts a `StatementKind::Assign` to assign `const ()` to a `Place`, for the + // empty value for the executed block. When the last line does not end in a semicolon + // (that is, when the block actually results in a value), the additional `Assign` is not + // generated, and the brace is not included. + let @51,53⦊mut countdown = 0⦉@51,53; + if @51,53⦊true⦉@51,53 @54,56⦊{ + countdown = 10; + }⦉@54,56@55⦊⦉@55 - let @77⦊z⦉@77 = if @54⦊countdown > 7⦉@54 { - @58⦊countdown -= 4⦉@58; - } else if @56⦊countdown > 2⦉@56 { - if @59,61⦊countdown < 1⦉@59,61 || @68⦊countdown > 5⦉@68@66⦊⦉@66@67⦊⦉@67 || @64⦊countdown != 9⦉@64@62⦊⦉@62@63⦊⦉@63 @70,72⦊{ - countdown = 0; - }⦉@70,72@71⦊⦉@71 - @74⦊countdown -= 5⦉@74; + if @57⦊countdown > 7⦉@57 @58,60,61⦊{ + countdown -= 4; + }⦉@58,60,61 + // The closing brace of the `then` branch is now included in the coverage region, and shown + // as "executed" (giving its line a count of 1 here). Since, in the original version above, + // the closing brace shares the same line as the `else if` conditional expression (which is + // not executed if the first `then` condition is true), only the condition's code region is + // marked with a count of 0 now. + else if @59⦊countdown > 2⦉@59 { + if @62,64⦊countdown < 1⦉@62,64 || @71⦊countdown > 5⦉@71@69⦊⦉@69@70⦊⦉@70 || @67⦊countdown != 9⦉@67@65⦊⦉@65@66⦊⦉@66 @73,75⦊{ + countdown = 0; + }⦉@73,75@74⦊⦉@74 + @76,77⦊countdown -= 5⦉@76,77; + } else { + @63⦊return⦉@63; + } + }@78⦊⦉@78@52⦊⦉@52 + + let @79⦊mut countdown = 0⦉@79; + if @79⦊true⦉@79 @80,82⦊{ + countdown = 1; + }⦉@80,82@81⦊⦉@81 + + let @106⦊z⦉@106 = if @83⦊countdown > 7⦉@83 @84,86,87⦊{ + countdown -= 4; + }⦉@84,86,87 else if @85⦊countdown > 2⦉@85 { + if @88,90⦊countdown < 1⦉@88,90 || @97⦊countdown > 5⦉@97@95⦊⦉@95@96⦊⦉@96 || @93⦊countdown != 9⦉@93@91⦊⦉@91@92⦊⦉@92 @99,101⦊{ + countdown = 0; + }⦉@99,101@100⦊⦉@100 + @102,103⦊countdown -= 5⦉@102,103; } else { - let @60,75,76⦊should_be_reachable = countdown; - println!("reached"); - return⦉@60,75,76; + let @89,104,105⦊should_be_reachable = countdown; + println!("reached"); + return⦉@89,104,105; }; - let @98⦊w⦉@98 = if @77⦊countdown > 7⦉@77 { - @81⦊countdown -= 4⦉@81; - } else if @79⦊countdown > 2⦉@79 { - if @82,84⦊countdown < 1⦉@82,84 || @91⦊countdown > 5⦉@91@89⦊⦉@89@90⦊⦉@90 || @87⦊countdown != 9⦉@87@85⦊⦉@85@86⦊⦉@86 @93,95⦊{ - countdown = 0; - }⦉@93,95@94⦊⦉@94 - @97⦊countdown -= 5⦉@97; + let @127⦊w⦉@127 = if @106⦊countdown > 7⦉@106 @107,109,110⦊{ + countdown -= 4; + }⦉@107,109,110 else if @108⦊countdown > 2⦉@108 { + if @111,113⦊countdown < 1⦉@111,113 || @120⦊countdown > 5⦉@120@118⦊⦉@118@119⦊⦉@119 || @116⦊countdown != 9⦉@116@114⦊⦉@114@115⦊⦉@115 @122,124⦊{ + countdown = 0; + }⦉@122,124@123⦊⦉@123 + @125,126⦊countdown -= 5⦉@125,126; } else { - @83⦊return⦉@83; + @112⦊return⦉@112; }; -}@101⦊⦉@101@102⦊⦉@102 +}@130⦊⦉@130@131⦊⦉@131 diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html index 31bb57be81b53..fc9f54143ed2a 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html @@ -71,10 +71,13 @@
fn in_func(a: u32) { let @0⦊b = 1⦉@0; - let @1,2,3,4⦊c⦉@1,2,3,4 = @0⦊a + b⦉@0; - @1,2,3,4⦊println!("c = {}", c) -@0,1,2,3,4⦊b = 1; + }⦉@1,2,3,4
+22:6-22:6: @4.Return: return"> let c = a + b;
+ println!("c = {}", c) + }⦉@0,1,2,3,4 diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html index 6c4ce72305e53..325d4483223b5 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html @@ -69,13 +69,33 @@ -
fn trait_func(&mut self, incr: u32) { - self.in_struct_field += @0⦊incr⦉@0; - fn trait_func(&mut self, incr: u32) @1,2⦊in_func(self.in_struct_field); -@0,1,2⦊{ + }⦉@1,2
+40:45-43:10: @2[2]: _0 = const () +43:10-43:10: @2.Return: return"> self.in_struct_field += incr; + in_func(self.in_struct_field); + }⦉@0,1,2 diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html index 7fbda5d0b3d2c..509a949cfcf59 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html @@ -108,28 +108,46 @@ 9:16-9:22: @16[18]: FakeRead(ForMatchedPlace, _26)">@14,16⦊a < 30⦉@14,16 { @17,19⦊break⦉@17,19; } - @20⦊a -= 5⦉@20; - @21⦊b -= 5⦉@21; - if @18,20,21⦊a -= 5; + b -= 5⦉@18,20,21; + if @21⦊b < 90⦉@21 { - @18,20,21⦊b < 90⦉@18,20,21 { + @25⦊a -= 10; -@22,24,25⦊a -= 10; + if is_true⦉@25 { - @26,28⦊break 'outer⦉@26,28; - } else { - @29⦊a -= 2; - if is_true⦉@22,24,25 { + @26,28⦊break 'outer⦉@26,28; + } else @27,29⦊{ + a -= 2; + } - }⦉@29@23⦊⦉@23 - }@30⦊⦉@30 - @32⦊countdown -= 1⦉@32; - }@7⦊⦉@7 -}@33⦊⦉@33 + }⦉@27,29@23⦊⦉@23 + }@30⦊⦉@30 + @31,32⦊countdown -= 1⦉@31,32; + }@7⦊⦉@7 +}@33⦊⦉@33 diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..2be6bad619ed2 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,259 @@ + + + + +overflow.main - Coverage Spans + + + +
fn main() -> Result<(),u8> { + let @0⦊mut countdown = 10⦉@0; + while @1,2⦊countdown > 0⦉@1,2 { + if @3,5⦊countdown == 1⦉@3,5 @6,8,9,10,11,12⦊{ + let result = might_overflow(10); + println!("Result: {}", result); + }⦉@6,8,9,10,11,12 else if @7⦊countdown < 5⦉@7 @13,15,16,17,18,19⦊{ + let result = might_overflow(1); + println!("Result: {}", result); + }⦉@13,15,16,17,18,19@14⦊⦉@14@20⦊⦉@20 + @21,22⦊countdown -= 1⦉@21,22; + } + @4⦊Ok(()) +}⦉@4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..44fabaf0d7d27 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html @@ -0,0 +1,397 @@ + + + + +overflow.might_overflow - Coverage Spans + + + +
fn might_overflow(to_add: u32) -> u32 { + if @0⦊to_add > 5⦉@0 @1,3,4,5⦊{ + println!("this will probably overflow"); + }⦉@1,3,4,5@2⦊⦉@2 + let @6,7,8,9,10,11,12,13,14⦊add_to = u32::MAX - 5; + println!("does {} + {} overflow?", add_to, to_add); + let result = to_add + add_to; + println!("continuing after overflow check"); + result +}⦉@6,7,8,9,10,11,12,13,14
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..4a44ca0a97bf5 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,103 @@ + + + + +panic_unwind.main - Coverage Spans + + + +
fn main() -> Result<(),u8> { + let @0⦊mut countdown = 10⦉@0; + while @1,2⦊countdown > 0⦉@1,2 { + if @3,5⦊countdown == 1⦉@3,5 @6,8,9⦊{ + might_panic(true); + }⦉@6,8,9 else if @7⦊countdown < 5⦉@7 @10,12,13⦊{ + might_panic(false); + }⦉@10,12,13@11⦊⦉@11@14⦊⦉@14 + @15,16⦊countdown -= 1⦉@15,16; + } + @4⦊Ok(()) +}⦉@4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..b209ea9eee980 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html @@ -0,0 +1,164 @@ + + + + +panic_unwind.might_panic - Coverage Spans + + + +
fn might_panic(should_panic: bool) { + if @0⦊should_panic⦉@0 { + @1,3,4,5⦊println!("panicking..."); + panic!("panics");⦉@1,3,4,5 + } else @2,6,7⦊{ + println!("Don't Panic"); + } +}⦉@2,6,7
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html index 914e829faa0bd..bc3e67b8c9909 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html @@ -133,9 +133,12 @@ @10,12⦊break⦉@10,12 ; } - @13⦊countdown - -= - 1⦉@13 + @11,13⦊countdown + -= + 1⦉@11,13 ; }@7⦊⦉@7 }@10,12⦊⦉@10,12 diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html index 5c9baee5d8050..23b3549984677 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html @@ -79,33 +79,38 @@ @6,8⦊_⦉@6,8 +17:9-17:10: @8[5]: _8 = const ()">@6,8,9⦊_⦉@6,8,9
in @2,3,4⦊0..10⦉@2,3,4 { - @9⦊countdown -@6,8,9⦊countdown + -= 1 - ; - if - countdown < 5⦉@9 +25:13-25:26: @9[6]: FakeRead(ForMatchedPlace, _18)"> countdown < 5⦉@6,8,9 { @10,12,13,14⦊call(/*return_error=*/ true)⦉@10,12,13,14 } ; } - @12⦊countdown - -= - 1⦉@12 + @7,12⦊countdown + -= + 1⦉@7,12 ; } + + +yield.main-{closure#0} - Coverage Spans + + + +
|| { + @0⦊yield 1⦉@0; + return @1⦊"foo" + }⦉@1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..00b2b35f3ddc4 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html @@ -0,0 +1,81 @@ + + + + +yield.main-{closure#1} - Coverage Spans + + + +
|| { + @0⦊yield 1⦉@0; + @1⦊yield 2⦉@1; + @2⦊yield 3⦉@2; + return @3⦊"foo" + }⦉@3
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..f5ea50692bfdd --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,138 @@ + + + + +yield.main - Coverage Spans + + + +
fn main() { + let @0,1,2⦊mut generator⦉@0,1,2 = || { + yield 1; + return "foo" + }; + + match @0,1,2⦊Pin::new(&mut generator).resume(()) { + GeneratorState::Yielded(1)⦉@0,1,2 => @4,6,7,8⦊{}⦉@4,6,7,8 + _ => @5⦊panic!("unexpected value from resume")⦉@5, + } + match @4,6,7,8⦊Pin::new(&mut generator).resume(())⦉@4,6,7,8 { + GeneratorState::Complete(@10,11⦊"foo"⦉@10,11) => @12,13,14,15⦊{}⦉@12,13,14,15 + _ => @9⦊panic!("unexpected value from resume")⦉@9, + } + + let @12,13,14,15⦊mut generator⦉@12,13,14,15 = || { + yield 1; + yield 2; + yield 3; + return "foo" + }; + + match @12,13,14,15⦊Pin::new(&mut generator).resume(()) { + GeneratorState::Yielded(1)⦉@12,13,14,15 => @17,19,20,21⦊{}⦉@17,19,20,21 + _ => @18⦊panic!("unexpected value from resume")⦉@18, + } + match @17,19,20,21⦊Pin::new(&mut generator).resume(()) { + GeneratorState::Yielded(2)⦉@17,19,20,21 => @23,25⦊{}⦉@23,25 + _ => @24⦊panic!("unexpected value from resume")⦉@24, + } +}@23,25⦊⦉@23,25
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..a8227cffc60f6 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,99 @@ + + + + +abort.main - Coverage Spans + + + +
fn main() -> Result<(),u8> { + let @0⦊mut countdown = 10⦉@0; + while @1,2⦊countdown > 0⦉@1,2 { + if @3,5⦊countdown < 5⦉@3,5 @6,8,9⦊{ + might_abort(false); + }⦉@6,8,9@7⦊⦉@7 + @10,11⦊countdown -= 1⦉@10,11; + } + @4⦊Ok(()) +}⦉@4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..daef056a19aa1 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html @@ -0,0 +1,164 @@ + + + + +abort.might_abort - Coverage Spans + + + +
fn might_abort(should_abort: bool) { + if @0⦊should_abort⦉@0 { + @1,3,4,5⦊println!("aborting..."); + panic!("panics and aborts");⦉@1,3,4,5 + } else @2,6,7⦊{ + println!("Don't Panic"); + } +}⦉@2,6,7
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..499825445acea --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,103 @@ + + + + +assert.main - Coverage Spans + + + +
fn main() -> Result<(),u8> { + let @0⦊mut countdown = 10⦉@0; + while @1,2⦊countdown > 0⦉@1,2 { + if @3,5⦊countdown == 1⦉@3,5 @6,8,9⦊{ + might_fail_assert(3); + }⦉@6,8,9 else if @7⦊countdown < 5⦉@7 @10,12,13⦊{ + might_fail_assert(2); + }⦉@10,12,13@11⦊⦉@11@14⦊⦉@14 + @15,16⦊countdown -= 1⦉@15,16; + } + @4⦊Ok(()) +}⦉@4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..98be3485a4179 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html @@ -0,0 +1,97 @@ + + + + +assert.might_fail_assert - Coverage Spans + + + +
fn might_fail_assert(one_plus_one: u32) { + @0,1,2,3,4⦊println!("does 1 + 1 = {}?", one_plus_one);⦉@0,1,2,3,4 + assert_eq!(@0,1,2,3,4⦊1 + 1⦉@0,1,2,3,4, one_plus_one, @5,7,8,9,10,11,12⦊"the argument was wrong"⦉@5,7,8,9,10,11,12); +}@6⦊⦉@6
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..31646f8ce81dc --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,89 @@ + + + + +async.executor-block_on-VTABLE-{closure#0} - Coverage Spans + + + +
{ + @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 + }
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..ddc791f074fbb --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html @@ -0,0 +1,89 @@ + + + + +async.executor-block_on-VTABLE-{closure#1} - Coverage Spans + + + +
{ + @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 + }
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..709b87fc50198 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html @@ -0,0 +1,89 @@ + + + + +async.executor-block_on-VTABLE-{closure#2} - Coverage Spans + + + +
{ + @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 + }
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..abd2621481a35 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html @@ -0,0 +1,75 @@ + + + + +async.executor-block_on-VTABLE-{closure#3} - Coverage Spans + + + +
|_| @0⦊()⦉@0
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..9d71d8ccc6e08 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html @@ -0,0 +1,226 @@ + + + + +async.executor-block_on - Coverage Spans + + + +
pub fn block_on<F: Future>(mut future: F) -> F::Output { + let @0,1,2,3,4,5⦊mut future = unsafe { Pin::new_unchecked(&mut future) }; + + static VTABLE: RawWakerVTable = RawWakerVTable::new( + |_| unimplemented!("clone"), + |_| unimplemented!("wake"), + |_| unimplemented!("wake_by_ref"), + |_| (), + ); + let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; + let mut context = Context::from_waker(&waker)⦉@0,1,2,3,4,5; + + loop { + if let Poll::Ready(@10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17) = @6,7,8,9⦊future.as_mut().poll(&mut context)⦉@6,7,8,9 { + break @10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17; + } + }@11,13⦊⦉@11,13 + }@10,12,14,15,16,17⦊⦉@10,12,14,15,16,17
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..779f67fd7c101 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,75 @@ + + + + +async.f-{closure#0} - Coverage Spans + + + +
{ @0⦊1 }⦉@0
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..050ae67efc98e --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html @@ -0,0 +1,74 @@ + + + + +async.f - Coverage Spans + + + +
async fn f() -> u8 { 1 }@0,1⦊⦉@0,1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..d176a607d3b54 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,75 @@ + + + + +async.foo-{closure#0} - Coverage Spans + + + +
{ @0⦊[false; 10] }⦉@0
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..64eeaefa89468 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html @@ -0,0 +1,74 @@ + + + + +async.foo - Coverage Spans + + + +
async fn foo() -> [bool; 10] { [false; 10] }@0,1⦊⦉@0,1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..4e894eecd16ae --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,80 @@ + + + + +async.g-{closure#0} - Coverage Spans + + + +
@0,2,3⦊{ + match x⦉@0,2,3 { + @16⦊y⦉@16 if @0,2,3⦊f()⦉@0,2,3.await == @9,12,14,15⦊y⦉@9,12,14,15@17⦊⦉@17 => @16⦊()⦉@16, + _ => @1⦊()⦉@1, + } +}@18,19⦊⦉@18,19
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..4788562a9d4fd --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html @@ -0,0 +1,79 @@ + + + + +async.g - Coverage Spans + + + +
pub async fn g(x: u8) { + match x { + y if f().await == y => (), + _ => (), + } +}@0,1⦊⦉@0,1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..de48232efde62 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,80 @@ + + + + +async.h-{closure#0} - Coverage Spans + + + +
@0,2,3⦊{ + match x⦉@0,2,3 { + @17⦊y⦉@17 if @0,2,3⦊foo()⦉@0,2,3.await[@9,12,14,15,16⦊y⦉@9,12,14,15,16]@18⦊⦉@18 => @17⦊()⦉@17, + _ => @1⦊()⦉@1, + } +}@19,20⦊⦉@19,20
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..83b0a3e0d43aa --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html @@ -0,0 +1,79 @@ + + + + +async.h - Coverage Spans + + + +
async fn h(x: usize) { + match x { + y if foo().await[y] => (), + _ => (), + } +}@0,1⦊⦉@0,1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..71397d3962539 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,82 @@ + + + + +async.i-{closure#0} - Coverage Spans + + + +
@0,2,3⦊{ + match x⦉@0,2,3 { + @17⦊y⦉@17 if @0,2,3⦊f()⦉@0,2,3.await == @9,12,14,15,16⦊y + 1⦉@9,12,14,15,16@18⦊⦉@18 => @17⦊()⦉@17, + _ => @1⦊()⦉@1, + } +}@19,20⦊⦉@19,20
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..55efca7448176 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html @@ -0,0 +1,79 @@ + + + + +async.i - Coverage Spans + + + +
async fn i(x: u8) { + match x { + y if f().await == y + 1 => (), + _ => (), + } +}@0,1⦊⦉@0,1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..2f14339d9e95b --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,133 @@ + + + + +async.main - Coverage Spans + + + +
fn main() @0,1,2,3,4,5,6,7,8,9⦊{ + let _ = g(10); + let _ = h(9); + let mut future = Box::pin(i(8)); + executor::block_on(future.as_mut()); +}⦉@0,1,2,3,4,5,6,7,8,9
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html index cda1040c29114..09adc12cefdb2 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html @@ -87,10 +87,12 @@ let @25⦊x⦉@25 = if @4⦊countdown > 7⦉@4 { - @8⦊countdown -= 4; - B⦉@8 + @5,7,8⦊countdown -= 4; + B⦉@5,7,8 } else if @6⦊countdown > 2⦉@6 { @@ -106,10 +108,12 @@ }⦉@20,22@21⦊⦉@21
- @24⦊countdown -= 5; - countdown⦉@24 + @23,24⦊countdown -= 5; + countdown⦉@23,24 } else { @10⦊return⦉@10; }; @@ -129,9 +133,15 @@ if @29⦊countdown > 7⦉@29 { - @33⦊countdown -= 4⦉@33; - } else if @29⦊countdown > 7⦉@29 @30,32,33⦊{ + countdown -= 4; + }⦉@30,32,33 else if @31⦊countdown > 2⦉@31 { if }⦉@45,47@46⦊⦉@46 - @49⦊countdown -= 5⦉@49; + @48,49⦊countdown -= 5⦉@48,49; } else { @35⦊return⦉@35; } - let @50⦊mut countdown = 0⦉@50; - if @50⦊true⦉@50 @51,53⦊{ - countdown = 1; - }⦉@51,53@52⦊⦉@52 + if @50⦊true⦉@50 { + // Demonstrate the difference with `TerminatorKind::Assert` as of 2020-11-15. Assert is no + // longer treated as a `BasicCoverageBlock` terminator, which changed the coverage region, + // for the executed `then` block above, to include the closing brace on line 30. That + // changed the line count, but the coverage code region (for the `else if` condition) is + // still valid. + // + // Note that `if` (then) and `else` blocks include the closing brace in their coverage + // code regions when the last line in the block ends in a semicolon, because the Rust + // compiler inserts a `StatementKind::Assign` to assign `const ()` to a `Place`, for the + // empty value for the executed block. When the last line does not end in a semicolon + // (that is, when the block actually results in a value), the additional `Assign` is not + // generated, and the brace is not included. + let @51,53⦊mut countdown = 0⦉@51,53; + if @51,53⦊true⦉@51,53 @54,56⦊{ + countdown = 10; + }⦉@54,56@55⦊⦉@55 - let @77⦊z⦉@77 = if @54⦊countdown > 7⦉@54 { - @58⦊countdown -= 4⦉@58; - } else if @56⦊countdown > 2⦉@56 { - if @59,61⦊countdown < 1⦉@59,61 || @68⦊countdown > 5⦉@68@66⦊⦉@66@67⦊⦉@67 || @64⦊countdown != 9⦉@64@62⦊⦉@62@63⦊⦉@63 @70,72⦊{ - countdown = 0; - }⦉@70,72@71⦊⦉@71 - @74⦊countdown -= 5⦉@74; + if @57⦊countdown > 7⦉@57 @58,60,61⦊{ + countdown -= 4; + }⦉@58,60,61 + // The closing brace of the `then` branch is now included in the coverage region, and shown + // as "executed" (giving its line a count of 1 here). Since, in the original version above, + // the closing brace shares the same line as the `else if` conditional expression (which is + // not executed if the first `then` condition is true), only the condition's code region is + // marked with a count of 0 now. + else if @59⦊countdown > 2⦉@59 { + if @62,64⦊countdown < 1⦉@62,64 || @71⦊countdown > 5⦉@71@69⦊⦉@69@70⦊⦉@70 || @67⦊countdown != 9⦉@67@65⦊⦉@65@66⦊⦉@66 @73,75⦊{ + countdown = 0; + }⦉@73,75@74⦊⦉@74 + @76,77⦊countdown -= 5⦉@76,77; + } else { + @63⦊return⦉@63; + } + }@78⦊⦉@78@52⦊⦉@52 + + let @79⦊mut countdown = 0⦉@79; + if @79⦊true⦉@79 @80,82⦊{ + countdown = 1; + }⦉@80,82@81⦊⦉@81 + + let @106⦊z⦉@106 = if @83⦊countdown > 7⦉@83 @84,86,87⦊{ + countdown -= 4; + }⦉@84,86,87 else if @85⦊countdown > 2⦉@85 { + if @88,90⦊countdown < 1⦉@88,90 || @97⦊countdown > 5⦉@97@95⦊⦉@95@96⦊⦉@96 || @93⦊countdown != 9⦉@93@91⦊⦉@91@92⦊⦉@92 @99,101⦊{ + countdown = 0; + }⦉@99,101@100⦊⦉@100 + @102,103⦊countdown -= 5⦉@102,103; } else { - let @60,75,76⦊should_be_reachable = countdown; - println!("reached"); - return⦉@60,75,76; + let @89,104,105⦊should_be_reachable = countdown; + println!("reached"); + return⦉@89,104,105; }; - let @98⦊w⦉@98 = if @77⦊countdown > 7⦉@77 { - @81⦊countdown -= 4⦉@81; - } else if @79⦊countdown > 2⦉@79 { - if @82,84⦊countdown < 1⦉@82,84 || @91⦊countdown > 5⦉@91@89⦊⦉@89@90⦊⦉@90 || @87⦊countdown != 9⦉@87@85⦊⦉@85@86⦊⦉@86 @93,95⦊{ - countdown = 0; - }⦉@93,95@94⦊⦉@94 - @97⦊countdown -= 5⦉@97; + let @127⦊w⦉@127 = if @106⦊countdown > 7⦉@106 @107,109,110⦊{ + countdown -= 4; + }⦉@107,109,110 else if @108⦊countdown > 2⦉@108 { + if @111,113⦊countdown < 1⦉@111,113 || @120⦊countdown > 5⦉@120@118⦊⦉@118@119⦊⦉@119 || @116⦊countdown != 9⦉@116@114⦊⦉@114@115⦊⦉@115 @122,124⦊{ + countdown = 0; + }⦉@122,124@123⦊⦉@123 + @125,126⦊countdown -= 5⦉@125,126; } else { - @83⦊return⦉@83; + @112⦊return⦉@112; }; -}@101⦊⦉@101@102⦊⦉@102 +}@130⦊⦉@130@131⦊⦉@131 diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html index 31bb57be81b53..fc9f54143ed2a 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html @@ -71,10 +71,13 @@
fn in_func(a: u32) { let @0⦊b = 1⦉@0; - let @1,2,3,4⦊c⦉@1,2,3,4 = @0⦊a + b⦉@0; - @1,2,3,4⦊println!("c = {}", c) -@0,1,2,3,4⦊b = 1; + }⦉@1,2,3,4
+22:6-22:6: @4.Return: return"> let c = a + b;
+ println!("c = {}", c) + }⦉@0,1,2,3,4
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html index 6c4ce72305e53..325d4483223b5 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html @@ -69,13 +69,33 @@ -
fn trait_func(&mut self, incr: u32) { - self.in_struct_field += @0⦊incr⦉@0; - fn trait_func(&mut self, incr: u32) @1,2⦊in_func(self.in_struct_field); -@0,1,2⦊{ + }⦉@1,2
+40:45-43:10: @2[2]: _0 = const () +43:10-43:10: @2.Return: return"> self.in_struct_field += incr;
+ in_func(self.in_struct_field); + }⦉@0,1,2
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html index 7fbda5d0b3d2c..509a949cfcf59 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html @@ -108,28 +108,46 @@ 9:16-9:22: @16[18]: FakeRead(ForMatchedPlace, _26)">@14,16⦊a < 30⦉@14,16
{ @17,19⦊break⦉@17,19; } - @20⦊a -= 5⦉@20; - @21⦊b -= 5⦉@21; - if @18,20,21⦊a -= 5; + b -= 5⦉@18,20,21; + if @21⦊b < 90⦉@21 { - @18,20,21⦊b < 90⦉@18,20,21 { + @25⦊a -= 10; -@22,24,25⦊a -= 10; + if is_true⦉@25 { - @26,28⦊break 'outer⦉@26,28; - } else { - @29⦊a -= 2; - if is_true⦉@22,24,25 { + @26,28⦊break 'outer⦉@26,28; + } else @27,29⦊{ + a -= 2; + } - }⦉@29@23⦊⦉@23 - }@30⦊⦉@30 - @32⦊countdown -= 1⦉@32; - }@7⦊⦉@7 -}@33⦊⦉@33 + }⦉@27,29@23⦊⦉@23 + }@30⦊⦉@30 + @31,32⦊countdown -= 1⦉@31,32; + }@7⦊⦉@7 +}@33⦊⦉@33 diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..2be6bad619ed2 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,259 @@ + + + + +overflow.main - Coverage Spans + + + +
fn main() -> Result<(),u8> { + let @0⦊mut countdown = 10⦉@0; + while @1,2⦊countdown > 0⦉@1,2 { + if @3,5⦊countdown == 1⦉@3,5 @6,8,9,10,11,12⦊{ + let result = might_overflow(10); + println!("Result: {}", result); + }⦉@6,8,9,10,11,12 else if @7⦊countdown < 5⦉@7 @13,15,16,17,18,19⦊{ + let result = might_overflow(1); + println!("Result: {}", result); + }⦉@13,15,16,17,18,19@14⦊⦉@14@20⦊⦉@20 + @21,22⦊countdown -= 1⦉@21,22; + } + @4⦊Ok(()) +}⦉@4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..44fabaf0d7d27 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html @@ -0,0 +1,397 @@ + + + + +overflow.might_overflow - Coverage Spans + + + +
fn might_overflow(to_add: u32) -> u32 { + if @0⦊to_add > 5⦉@0 @1,3,4,5⦊{ + println!("this will probably overflow"); + }⦉@1,3,4,5@2⦊⦉@2 + let @6,7,8,9,10,11,12,13,14⦊add_to = u32::MAX - 5; + println!("does {} + {} overflow?", add_to, to_add); + let result = to_add + add_to; + println!("continuing after overflow check"); + result +}⦉@6,7,8,9,10,11,12,13,14
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..4a44ca0a97bf5 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,103 @@ + + + + +panic_unwind.main - Coverage Spans + + + +
fn main() -> Result<(),u8> { + let @0⦊mut countdown = 10⦉@0; + while @1,2⦊countdown > 0⦉@1,2 { + if @3,5⦊countdown == 1⦉@3,5 @6,8,9⦊{ + might_panic(true); + }⦉@6,8,9 else if @7⦊countdown < 5⦉@7 @10,12,13⦊{ + might_panic(false); + }⦉@10,12,13@11⦊⦉@11@14⦊⦉@14 + @15,16⦊countdown -= 1⦉@15,16; + } + @4⦊Ok(()) +}⦉@4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..b209ea9eee980 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html @@ -0,0 +1,164 @@ + + + + +panic_unwind.might_panic - Coverage Spans + + + +
fn might_panic(should_panic: bool) { + if @0⦊should_panic⦉@0 { + @1,3,4,5⦊println!("panicking..."); + panic!("panics");⦉@1,3,4,5 + } else @2,6,7⦊{ + println!("Don't Panic"); + } +}⦉@2,6,7
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html index 914e829faa0bd..bc3e67b8c9909 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html @@ -133,9 +133,12 @@ @10,12⦊break⦉@10,12 ; } - @13⦊countdown - -= - 1⦉@13 + @11,13⦊countdown + -= + 1⦉@11,13 ; }@7⦊⦉@7 }@10,12⦊⦉@10,12 diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html index 5c9baee5d8050..23b3549984677 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html @@ -79,33 +79,38 @@ @6,8⦊_⦉@6,8 +17:9-17:10: @8[5]: _8 = const ()">@6,8,9⦊_⦉@6,8,9
in @2,3,4⦊0..10⦉@2,3,4 { - @9⦊countdown -@6,8,9⦊countdown + -= 1 - ; - if - countdown < 5⦉@9 +25:13-25:26: @9[6]: FakeRead(ForMatchedPlace, _18)"> countdown < 5⦉@6,8,9 { @10,12,13,14⦊call(/*return_error=*/ true)⦉@10,12,13,14 } ; } - @12⦊countdown - -= - 1⦉@12 + @7,12⦊countdown + -= + 1⦉@7,12 ; } + + +yield.main-{closure#0} - Coverage Spans + + + +
|| { + @0⦊yield 1⦉@0; + return @1⦊"foo" + }⦉@1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..00b2b35f3ddc4 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html @@ -0,0 +1,81 @@ + + + + +yield.main-{closure#1} - Coverage Spans + + + +
|| { + @0⦊yield 1⦉@0; + @1⦊yield 2⦉@1; + @2⦊yield 3⦉@2; + return @3⦊"foo" + }⦉@3
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..f5ea50692bfdd --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,138 @@ + + + + +yield.main - Coverage Spans + + + +
fn main() { + let @0,1,2⦊mut generator⦉@0,1,2 = || { + yield 1; + return "foo" + }; + + match @0,1,2⦊Pin::new(&mut generator).resume(()) { + GeneratorState::Yielded(1)⦉@0,1,2 => @4,6,7,8⦊{}⦉@4,6,7,8 + _ => @5⦊panic!("unexpected value from resume")⦉@5, + } + match @4,6,7,8⦊Pin::new(&mut generator).resume(())⦉@4,6,7,8 { + GeneratorState::Complete(@10,11⦊"foo"⦉@10,11) => @12,13,14,15⦊{}⦉@12,13,14,15 + _ => @9⦊panic!("unexpected value from resume")⦉@9, + } + + let @12,13,14,15⦊mut generator⦉@12,13,14,15 = || { + yield 1; + yield 2; + yield 3; + return "foo" + }; + + match @12,13,14,15⦊Pin::new(&mut generator).resume(()) { + GeneratorState::Yielded(1)⦉@12,13,14,15 => @17,19,20,21⦊{}⦉@17,19,20,21 + _ => @18⦊panic!("unexpected value from resume")⦉@18, + } + match @17,19,20,21⦊Pin::new(&mut generator).resume(()) { + GeneratorState::Yielded(2)⦉@17,19,20,21 => @23,25⦊{}⦉@23,25 + _ => @24⦊panic!("unexpected value from resume")⦉@24, + } +}@23,25⦊⦉@23,25
+ + diff --git a/src/test/run-make-fulldeps/coverage/abort.rs b/src/test/run-make-fulldeps/coverage/abort.rs new file mode 100644 index 0000000000000..01c5c92054717 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage/abort.rs @@ -0,0 +1,34 @@ +#![feature(unwind_attributes)] +#![allow(unused_assignments)] + +#[unwind(aborts)] +fn might_abort(should_abort: bool) { + if should_abort { + println!("aborting..."); + panic!("panics and aborts"); + } else { + println!("Don't Panic"); + } +} + +fn main() -> Result<(),u8> { + let mut countdown = 10; + while countdown > 0 { + if countdown < 5 { + might_abort(false); + } + countdown -= 1; + } + Ok(()) +} + +// Notes: +// 1. Compare this program and its coverage results to those of the similar tests +// `panic_unwind.rs` and `try_error_result.rs`. +// 2. This test confirms the coverage generated when a program includes `TerminatorKind::Abort`. +// 3. The test does not invoke the abort. By executing to a successful completion, the coverage +// results show where the program did and did not execute. +// 4. If the program actually aborted, the coverage counters would not be saved (which "works as +// intended"). Coverage results would show no executed coverage regions. +// 6. If `should_abort` is `true` and the program aborts, the program exits with a `132` status +// (on Linux at least). diff --git a/src/test/run-make-fulldeps/coverage/assert.rs b/src/test/run-make-fulldeps/coverage/assert.rs new file mode 100644 index 0000000000000..c85f2748eb9d8 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage/assert.rs @@ -0,0 +1,32 @@ +#![allow(unused_assignments)] +// expect-exit-status-101 + +fn might_fail_assert(one_plus_one: u32) { + println!("does 1 + 1 = {}?", one_plus_one); + assert_eq!(1 + 1, one_plus_one, "the argument was wrong"); +} + +fn main() -> Result<(),u8> { + let mut countdown = 10; + while countdown > 0 { + if countdown == 1 { + might_fail_assert(3); + } else if countdown < 5 { + might_fail_assert(2); + } + countdown -= 1; + } + Ok(()) +} + +// Notes: +// 1. Compare this program and its coverage results to those of the very similar test +// `panic_unwind.rs`, and similar tests `abort.rs` and `try_error_result.rs`. +// 2. This test confirms the coverage generated when a program passes or fails an `assert!()` or +// related `assert_*!()` macro. +// 3. Notably, the `assert` macros *do not* generate `TerminatorKind::Assert`. The macros produce +// conditional expressions, `TerminatorKind::SwitchInt` branches, and a possible call to +// `begin_panic_fmt()` (that begins a panic unwind, if the assertion test fails). +// 4. `TerminatoKind::Assert` is, however, also present in the MIR generated for this test +// (and in many other coverage tests). The `Assert` terminator is typically generated by the +// Rust compiler to check for runtime failures, such as numeric overflows. diff --git a/src/test/run-make-fulldeps/coverage/async.rs b/src/test/run-make-fulldeps/coverage/async.rs new file mode 100644 index 0000000000000..f69b8dce89339 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage/async.rs @@ -0,0 +1,64 @@ +#![allow(unused_assignments)] + +// require-rust-edition-2018 + +async fn f() -> u8 { 1 } + +async fn foo() -> [bool; 10] { [false; 10] } + +pub async fn g(x: u8) { + match x { + y if f().await == y => (), + _ => (), + } +} + +// #78366: check the reference to the binding is recorded even if the binding is not autorefed + +async fn h(x: usize) { + match x { + y if foo().await[y] => (), + _ => (), + } +} + +async fn i(x: u8) { + match x { + y if f().await == y + 1 => (), + _ => (), + } +} + +fn main() { + let _ = g(10); + let _ = h(9); + let mut future = Box::pin(i(8)); + executor::block_on(future.as_mut()); +} + +mod executor { + use core::{ + future::Future, + pin::Pin, + task::{Context, Poll, RawWaker, RawWakerVTable, Waker}, + }; + + pub fn block_on(mut future: F) -> F::Output { + let mut future = unsafe { Pin::new_unchecked(&mut future) }; + + static VTABLE: RawWakerVTable = RawWakerVTable::new( + |_| unimplemented!("clone"), + |_| unimplemented!("wake"), + |_| unimplemented!("wake_by_ref"), + |_| (), + ); + let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; + let mut context = Context::from_waker(&waker); + + loop { + if let Poll::Ready(val) = future.as_mut().poll(&mut context) { + break val; + } + } + } +} diff --git a/src/test/run-make-fulldeps/coverage/conditions.rs b/src/test/run-make-fulldeps/coverage/conditions.rs index da206e28f31da..1a8bafa50d468 100644 --- a/src/test/run-make-fulldeps/coverage/conditions.rs +++ b/src/test/run-make-fulldeps/coverage/conditions.rs @@ -36,6 +36,42 @@ fn main() { return; } + if true { + // Demonstrate the difference with `TerminatorKind::Assert` as of 2020-11-15. Assert is no + // longer treated as a `BasicCoverageBlock` terminator, which changed the coverage region, + // for the executed `then` block above, to include the closing brace on line 30. That + // changed the line count, but the coverage code region (for the `else if` condition) is + // still valid. + // + // Note that `if` (then) and `else` blocks include the closing brace in their coverage + // code regions when the last line in the block ends in a semicolon, because the Rust + // compiler inserts a `StatementKind::Assign` to assign `const ()` to a `Place`, for the + // empty value for the executed block. When the last line does not end in a semicolon + // (that is, when the block actually results in a value), the additional `Assign` is not + // generated, and the brace is not included. + let mut countdown = 0; + if true { + countdown = 10; + } + + if countdown > 7 { + countdown -= 4; + } + // The closing brace of the `then` branch is now included in the coverage region, and shown + // as "executed" (giving its line a count of 1 here). Since, in the original version above, + // the closing brace shares the same line as the `else if` conditional expression (which is + // not executed if the first `then` condition is true), only the condition's code region is + // marked with a count of 0 now. + else if countdown > 2 { + if countdown < 1 || countdown > 5 || countdown != 9 { + countdown = 0; + } + countdown -= 5; + } else { + return; + } + } + let mut countdown = 0; if true { countdown = 1; diff --git a/src/test/run-make-fulldeps/coverage/coverage_tools.mk b/src/test/run-make-fulldeps/coverage/coverage_tools.mk index 99a2e0ba9523e..867a3566ac3af 100644 --- a/src/test/run-make-fulldeps/coverage/coverage_tools.mk +++ b/src/test/run-make-fulldeps/coverage/coverage_tools.mk @@ -44,8 +44,3 @@ LLVM_VERSION_11_PLUS := $(shell \ LLVM_VERSION=$$("$(LLVM_BIN_DIR)"/llvm-config --version) && \ LLVM_VERSION_MAJOR=$${LLVM_VERSION/.*/} && \ [ $$LLVM_VERSION_MAJOR -ge 11 ] && echo true || echo false) - -# FIXME(richkadel): Can any of the features tested by `run-make-fulldeps/coverage-*` tests be tested -# just as completely by more focused unit tests of the code logic itself, to reduce the number of -# test result files generated and maintained, and to help identify specific test failures and root -# causes more easily? diff --git a/src/test/run-make-fulldeps/coverage/overflow.rs b/src/test/run-make-fulldeps/coverage/overflow.rs new file mode 100644 index 0000000000000..e537b0e95c32a --- /dev/null +++ b/src/test/run-make-fulldeps/coverage/overflow.rs @@ -0,0 +1,63 @@ +#![allow(unused_assignments)] +// expect-exit-status-101 + +fn might_overflow(to_add: u32) -> u32 { + if to_add > 5 { + println!("this will probably overflow"); + } + let add_to = u32::MAX - 5; + println!("does {} + {} overflow?", add_to, to_add); + let result = to_add + add_to; + println!("continuing after overflow check"); + result +} + +fn main() -> Result<(),u8> { + let mut countdown = 10; + while countdown > 0 { + if countdown == 1 { + let result = might_overflow(10); + println!("Result: {}", result); + } else if countdown < 5 { + let result = might_overflow(1); + println!("Result: {}", result); + } + countdown -= 1; + } + Ok(()) +} + +// Notes: +// 1. Compare this program and its coverage results to those of the very similar test `assert.rs`, +// and similar tests `panic_unwind.rs`, abort.rs` and `try_error_result.rs`. +// 2. This test confirms the coverage generated when a program passes or fails a +// compiler-generated `TerminatorKind::Assert` (based on an overflow check, in this case). +// 3. Similar to how the coverage instrumentation handles `TerminatorKind::Call`, +// compiler-generated assertion failures are assumed to be a symptom of a program bug, not +// expected behavior. To simplify the coverage graphs and keep instrumented programs as +// small and fast as possible, `Assert` terminators are assumed to always succeed, and +// therefore are considered "non-branching" terminators. So, an `Assert` terminator does not +// get its own coverage counter. +// 4. After an unhandled panic or failed Assert, coverage results may not always be intuitive. +// In this test, the final count for the statements after the `if` block in `might_overflow()` +// is 4, even though the lines after `to_add + add_to` were executed only 3 times. Depending +// on the MIR graph and the structure of the code, this count could have been 3 (which might +// have been valid for the overflowed add `+`, but should have been 4 for the lines before +// the overflow. The reason for this potential uncertainty is, a `CounterKind` is incremented +// via StatementKind::Counter at the end of the block, but (as in the case in this test), +// a CounterKind::Expression is always evaluated. In this case, the expression was based on +// a `Counter` incremented as part of the evaluation of the `if` expression, which was +// executed, and counted, 4 times, before reaching the overflow add. + +// If the program did not overflow, the coverage for `might_overflow()` would look like this: +// +// 4| |fn might_overflow(to_add: u32) -> u32 { +// 5| 4| if to_add > 5 { +// 6| 0| println!("this will probably overflow"); +// 7| 4| } +// 8| 4| let add_to = u32::MAX - 5; +// 9| 4| println!("does {} + {} overflow?", add_to, to_add); +// 10| 4| let result = to_add + add_to; +// 11| 4| println!("continuing after overflow check"); +// 12| 4| result +// 13| 4|} diff --git a/src/test/run-make-fulldeps/coverage/panic_unwind.rs b/src/test/run-make-fulldeps/coverage/panic_unwind.rs new file mode 100644 index 0000000000000..02fa01ab96234 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage/panic_unwind.rs @@ -0,0 +1,49 @@ +#![allow(unused_assignments)] +// expect-exit-status-101 + +fn might_panic(should_panic: bool) { + if should_panic { + println!("panicking..."); + panic!("panics"); + } else { + println!("Don't Panic"); + } +} + +fn main() -> Result<(),u8> { + let mut countdown = 10; + while countdown > 0 { + if countdown == 1 { + might_panic(true); + } else if countdown < 5 { + might_panic(false); + } + countdown -= 1; + } + Ok(()) +} + +// Notes: +// 1. Compare this program and its coverage results to those of the similar tests `abort.rs` and +// `try_error_result.rs`. +// 2. Since the `panic_unwind.rs` test is allowed to unwind, it is also allowed to execute the +// normal program exit cleanup, including writing out the current values of the coverage +// counters. +// 3. The coverage results show (interestingly) that the `panic!()` call did execute, but it does +// not show coverage of the `if countdown == 1` branch in `main()` that calls +// `might_panic(true)` (causing the call to `panic!()`). +// 4. The reason `main()`s `if countdown == 1` branch, calling `might_panic(true)`, appears +// "uncovered" is, InstrumentCoverage (intentionally) treats `TerminatorKind::Call` terminators +// as non-branching, because when a program executes normally, they always are. Errors handled +// via the try `?` operator produce error handling branches that *are* treated as branches in +// coverage results. By treating calls without try `?` operators as non-branching (assumed to +// return normally and continue) the coverage graph can be simplified, producing smaller, +// faster binaries, and cleaner coverage results. +// 5. The reason the coverage results actually show `panic!()` was called is most likely because +// `panic!()` is a macro, not a simple function call, and there are other `Statement`s and/or +// `Terminator`s that execute with a coverage counter before the panic and unwind occur. +// 6. By best practice, programs should not panic. By design, the coverage implementation will not +// incur additional cost (in program size and execution time) to improve coverage results for +// an event that is not supposted to happen. +// 7. FIXME(#78544): This issue describes a feature request for a proposed option to enable +// more accurate coverage results for tests that intentionally panic. diff --git a/src/test/run-make-fulldeps/coverage/yield.rs b/src/test/run-make-fulldeps/coverage/yield.rs new file mode 100644 index 0000000000000..ff7616656ff50 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage/yield.rs @@ -0,0 +1,37 @@ +#![feature(generators, generator_trait)] +#![allow(unused_assignments)] + +use std::ops::{Generator, GeneratorState}; +use std::pin::Pin; + +fn main() { + let mut generator = || { + yield 1; + return "foo" + }; + + match Pin::new(&mut generator).resume(()) { + GeneratorState::Yielded(1) => {} + _ => panic!("unexpected value from resume"), + } + match Pin::new(&mut generator).resume(()) { + GeneratorState::Complete("foo") => {} + _ => panic!("unexpected value from resume"), + } + + let mut generator = || { + yield 1; + yield 2; + yield 3; + return "foo" + }; + + match Pin::new(&mut generator).resume(()) { + GeneratorState::Yielded(1) => {} + _ => panic!("unexpected value from resume"), + } + match Pin::new(&mut generator).resume(()) { + GeneratorState::Yielded(2) => {} + _ => panic!("unexpected value from resume"), + } +} diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs index 0541548aefd6d..5177dae8a6604 100644 --- a/src/tools/compiletest/src/main.rs +++ b/src/tools/compiletest/src/main.rs @@ -508,8 +508,6 @@ fn common_inputs_stamp(config: &Config) -> Stamp { stamp.add_path(&rustdoc_path); stamp.add_path(&rust_src_dir.join("src/etc/htmldocck.py")); } - // FIXME(richkadel): Do I need to add an `if let Some(rust_demangler_path) contribution to the - // stamp here as well? // Compiletest itself. stamp.add_dir(&rust_src_dir.join("src/tools/compiletest/")); From f6c9c1a576ba485ad5bd072d9fd8e52c9a043788 Mon Sep 17 00:00:00 2001 From: Rich Kadel Date: Mon, 30 Nov 2020 23:37:49 -0800 Subject: [PATCH 2/7] Removed -base from run-make-fulldeps/coverage-*-base In preparation for removing the -deadcode variants --- src/test/run-make-fulldeps/coverage-llvmir-deadcode/Makefile | 2 +- .../{coverage-llvmir-base => coverage-llvmir}/Makefile | 2 +- .../filecheck.testprog.txt | 0 .../{coverage-llvmir-base => coverage-llvmir}/testprog.rs | 0 src/test/run-make-fulldeps/coverage-reports-deadcode/Makefile | 2 +- .../{coverage-reports-base => coverage-reports}/Makefile | 2 +- .../expected_export_coverage.abort.json | 0 .../expected_export_coverage.assert.json | 0 .../expected_export_coverage.async.json | 0 .../expected_export_coverage.closure.json | 0 .../expected_export_coverage.conditions.json | 0 .../expected_export_coverage.drop_trait.json | 0 .../expected_export_coverage.generics.json | 0 .../expected_export_coverage.if.json | 0 .../expected_export_coverage.if_else.json | 0 .../expected_export_coverage.inner_items.json | 0 .../expected_export_coverage.lazy_boolean.json | 0 .../expected_export_coverage.loop_break_value.json | 0 .../expected_export_coverage.loops_branches.json | 0 .../expected_export_coverage.nested_loops.json | 0 .../expected_export_coverage.overflow.json | 0 .../expected_export_coverage.panic_unwind.json | 0 .../expected_export_coverage.partial_eq.json | 0 .../expected_export_coverage.simple_loop.json | 0 .../expected_export_coverage.simple_match.json | 0 .../expected_export_coverage.tight_inf_loop.json | 0 .../expected_export_coverage.try_error_result.json | 0 .../expected_export_coverage.while.json | 0 .../expected_export_coverage.while_early_ret.json | 0 .../expected_export_coverage.yield.json | 0 .../expected_show_coverage.abort.txt | 0 .../expected_show_coverage.assert.txt | 0 .../expected_show_coverage.async.txt | 0 .../expected_show_coverage.closure.txt | 0 .../expected_show_coverage.conditions.txt | 0 .../expected_show_coverage.drop_trait.txt | 0 .../expected_show_coverage.generics.txt | 0 .../expected_show_coverage.if.txt | 0 .../expected_show_coverage.if_else.txt | 0 .../expected_show_coverage.inner_items.txt | 0 .../expected_show_coverage.lazy_boolean.txt | 0 .../expected_show_coverage.loop_break_value.txt | 0 .../expected_show_coverage.loops_branches.txt | 0 .../expected_show_coverage.nested_loops.txt | 0 .../expected_show_coverage.overflow.txt | 0 .../expected_show_coverage.panic_unwind.txt | 0 .../expected_show_coverage.partial_eq.txt | 0 .../expected_show_coverage.simple_loop.txt | 0 .../expected_show_coverage.simple_match.txt | 0 .../expected_show_coverage.tight_inf_loop.txt | 0 .../expected_show_coverage.try_error_result.txt | 0 .../expected_show_coverage.while.txt | 0 .../expected_show_coverage.while_early_ret.txt | 0 .../expected_show_coverage.yield.txt | 0 .../expected_show_coverage_counters.abort.txt | 0 .../expected_show_coverage_counters.assert.txt | 0 .../expected_show_coverage_counters.async.txt | 0 .../expected_show_coverage_counters.closure.txt | 0 .../expected_show_coverage_counters.conditions.txt | 0 .../expected_show_coverage_counters.drop_trait.txt | 0 .../expected_show_coverage_counters.generics.txt | 0 .../expected_show_coverage_counters.if.txt | 0 .../expected_show_coverage_counters.if_else.txt | 0 .../expected_show_coverage_counters.inner_items.txt | 0 .../expected_show_coverage_counters.lazy_boolean.txt | 0 .../expected_show_coverage_counters.loop_break_value.txt | 0 .../expected_show_coverage_counters.loops_branches.txt | 0 .../expected_show_coverage_counters.nested_loops.txt | 0 .../expected_show_coverage_counters.overflow.txt | 0 .../expected_show_coverage_counters.panic_unwind.txt | 0 .../expected_show_coverage_counters.partial_eq.txt | 0 .../expected_show_coverage_counters.simple_loop.txt | 0 .../expected_show_coverage_counters.simple_match.txt | 0 .../expected_show_coverage_counters.tight_inf_loop.txt | 0 .../expected_show_coverage_counters.try_error_result.txt | 0 .../expected_show_coverage_counters.while.txt | 0 .../expected_show_coverage_counters.while_early_ret.txt | 0 .../expected_show_coverage_counters.yield.txt | 0 .../prettify_json.py | 0 .../run-make-fulldeps/coverage-spanview-deadcode/Makefile | 2 +- .../abort.main.-------.InstrumentCoverage.0.html | 2 +- .../abort.might_abort.-------.InstrumentCoverage.0.html | 2 +- .../assert.main.-------.InstrumentCoverage.0.html | 2 +- ...assert.might_fail_assert.-------.InstrumentCoverage.0.html | 2 +- ...ck_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ...ck_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html | 2 +- ...ck_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html | 2 +- ...ck_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html | 2 +- .../async.executor-block_on.-------.InstrumentCoverage.0.html | 2 +- .../async.f-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../async.f.-------.InstrumentCoverage.0.html | 2 +- .../async.foo-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../async.foo.-------.InstrumentCoverage.0.html | 2 +- .../async.g-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../async.g.-------.InstrumentCoverage.0.html | 2 +- .../async.h-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../async.h.-------.InstrumentCoverage.0.html | 2 +- .../async.i-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../async.i.-------.InstrumentCoverage.0.html | 2 +- .../async.main.-------.InstrumentCoverage.0.html | 2 +- ...closure.main-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ...closure.main-{closure#1}.-------.InstrumentCoverage.0.html | 2 +- ...closure.main-{closure#2}.-------.InstrumentCoverage.0.html | 2 +- ...closure.main-{closure#3}.-------.InstrumentCoverage.0.html | 2 +- .../closure.main.-------.InstrumentCoverage.0.html | 2 +- .../conditions.main.-------.InstrumentCoverage.0.html | 2 +- .../drop_trait.main.-------.InstrumentCoverage.0.html | 2 +- ...drop_trait.{impl#0}-drop.-------.InstrumentCoverage.0.html | 2 +- .../generics.main.-------.InstrumentCoverage.0.html | 2 +- ...cs.{impl#0}-set_strength.-------.InstrumentCoverage.0.html | 2 +- .../generics.{impl#1}-drop.-------.InstrumentCoverage.0.html | 2 +- .../if.main.-------.InstrumentCoverage.0.html | 2 +- .../if_else.main.-------.InstrumentCoverage.0.html | 2 +- ...Trait-default_trait_func.-------.InstrumentCoverage.0.html | 2 +- ...inner_items.main-in_func.-------.InstrumentCoverage.0.html | 2 +- ...main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html | 2 +- .../inner_items.main.-------.InstrumentCoverage.0.html | 2 +- .../lazy_boolean.main.-------.InstrumentCoverage.0.html | 2 +- .../loop_break_value.main.-------.InstrumentCoverage.0.html | 2 +- .../loops_branches.main.-------.InstrumentCoverage.0.html | 2 +- ...ps_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html | 2 +- .../nested_loops.main.-------.InstrumentCoverage.0.html | 2 +- .../overflow.main.-------.InstrumentCoverage.0.html | 2 +- .../overflow.might_overflow.-------.InstrumentCoverage.0.html | 2 +- .../panic_unwind.main.-------.InstrumentCoverage.0.html | 2 +- ...panic_unwind.might_panic.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.main.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#0}-new.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#1}-cmp.-------.InstrumentCoverage.0.html | 2 +- ...-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ....{impl#2}-ge-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#2}-ge.-------.InstrumentCoverage.0.html | 2 +- ...-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ....{impl#2}-gt-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#2}-gt.-------.InstrumentCoverage.0.html | 2 +- ...-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ....{impl#2}-le-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#2}-le.-------.InstrumentCoverage.0.html | 2 +- ...-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ....{impl#2}-lt-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#2}-lt.-------.InstrumentCoverage.0.html | 2 +- ..._eq.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html | 2 +- ...ert_receiver_is_total_eq.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#6}-eq.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#6}-ne.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#7}-fmt.-------.InstrumentCoverage.0.html | 2 +- ...artial_eq.{impl#8}-clone.-------.InstrumentCoverage.0.html | 2 +- .../simple_loop.main.-------.InstrumentCoverage.0.html | 2 +- .../simple_match.main.-------.InstrumentCoverage.0.html | 2 +- .../tight_inf_loop.main.-------.InstrumentCoverage.0.html | 2 +- .../try_error_result.call.-------.InstrumentCoverage.0.html | 2 +- .../try_error_result.main.-------.InstrumentCoverage.0.html | 2 +- .../while.main.-------.InstrumentCoverage.0.html | 2 +- .../while_early_ret.main.-------.InstrumentCoverage.0.html | 2 +- .../yield.main-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../yield.main-{closure#1}.-------.InstrumentCoverage.0.html | 2 +- .../yield.main.-------.InstrumentCoverage.0.html | 2 +- .../{coverage-spanview-base => coverage-spanview}/Makefile | 4 ++-- .../escape_url.py | 0 .../abort.main.-------.InstrumentCoverage.0.html | 2 +- .../abort.might_abort.-------.InstrumentCoverage.0.html | 2 +- .../assert.main.-------.InstrumentCoverage.0.html | 2 +- ...assert.might_fail_assert.-------.InstrumentCoverage.0.html | 2 +- ...ck_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ...ck_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html | 2 +- ...ck_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html | 2 +- ...ck_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html | 2 +- .../async.executor-block_on.-------.InstrumentCoverage.0.html | 2 +- .../async.f-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../async.f.-------.InstrumentCoverage.0.html | 2 +- .../async.foo-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../async.foo.-------.InstrumentCoverage.0.html | 2 +- .../async.g-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../async.g.-------.InstrumentCoverage.0.html | 2 +- .../async.h-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../async.h.-------.InstrumentCoverage.0.html | 2 +- .../async.i-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../async.i.-------.InstrumentCoverage.0.html | 2 +- .../async.main.-------.InstrumentCoverage.0.html | 2 +- ...closure.main-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ...closure.main-{closure#1}.-------.InstrumentCoverage.0.html | 2 +- ...closure.main-{closure#2}.-------.InstrumentCoverage.0.html | 2 +- ...closure.main-{closure#3}.-------.InstrumentCoverage.0.html | 2 +- .../closure.main.-------.InstrumentCoverage.0.html | 2 +- .../conditions.main.-------.InstrumentCoverage.0.html | 2 +- .../drop_trait.main.-------.InstrumentCoverage.0.html | 2 +- ...drop_trait.{impl#0}-drop.-------.InstrumentCoverage.0.html | 2 +- .../generics.main.-------.InstrumentCoverage.0.html | 2 +- ...cs.{impl#0}-set_strength.-------.InstrumentCoverage.0.html | 2 +- .../generics.{impl#1}-drop.-------.InstrumentCoverage.0.html | 2 +- .../if.main.-------.InstrumentCoverage.0.html | 2 +- .../if_else.main.-------.InstrumentCoverage.0.html | 2 +- ...Trait-default_trait_func.-------.InstrumentCoverage.0.html | 2 +- ...inner_items.main-in_func.-------.InstrumentCoverage.0.html | 2 +- ...main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html | 2 +- .../inner_items.main.-------.InstrumentCoverage.0.html | 2 +- .../lazy_boolean.main.-------.InstrumentCoverage.0.html | 2 +- .../loop_break_value.main.-------.InstrumentCoverage.0.html | 2 +- .../loops_branches.main.-------.InstrumentCoverage.0.html | 2 +- ...ps_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html | 2 +- .../nested_loops.main.-------.InstrumentCoverage.0.html | 2 +- .../overflow.main.-------.InstrumentCoverage.0.html | 2 +- .../overflow.might_overflow.-------.InstrumentCoverage.0.html | 2 +- .../panic_unwind.main.-------.InstrumentCoverage.0.html | 2 +- ...panic_unwind.might_panic.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.main.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#0}-new.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#1}-cmp.-------.InstrumentCoverage.0.html | 2 +- ...-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ....{impl#2}-ge-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#2}-ge.-------.InstrumentCoverage.0.html | 2 +- ...-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ....{impl#2}-gt-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#2}-gt.-------.InstrumentCoverage.0.html | 2 +- ...-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ....{impl#2}-le-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#2}-le.-------.InstrumentCoverage.0.html | 2 +- ...-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- ....{impl#2}-lt-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#2}-lt.-------.InstrumentCoverage.0.html | 2 +- ..._eq.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html | 2 +- ...ert_receiver_is_total_eq.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#6}-eq.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#6}-ne.-------.InstrumentCoverage.0.html | 2 +- .../partial_eq.{impl#7}-fmt.-------.InstrumentCoverage.0.html | 2 +- ...artial_eq.{impl#8}-clone.-------.InstrumentCoverage.0.html | 2 +- .../simple_loop.main.-------.InstrumentCoverage.0.html | 2 +- .../simple_match.main.-------.InstrumentCoverage.0.html | 2 +- .../tight_inf_loop.main.-------.InstrumentCoverage.0.html | 2 +- .../try_error_result.call.-------.InstrumentCoverage.0.html | 2 +- .../try_error_result.main.-------.InstrumentCoverage.0.html | 2 +- .../while.main.-------.InstrumentCoverage.0.html | 2 +- .../while_early_ret.main.-------.InstrumentCoverage.0.html | 2 +- .../yield.main-{closure#0}.-------.InstrumentCoverage.0.html | 2 +- .../yield.main-{closure#1}.-------.InstrumentCoverage.0.html | 2 +- .../yield.main.-------.InstrumentCoverage.0.html | 2 +- 236 files changed, 161 insertions(+), 161 deletions(-) rename src/test/run-make-fulldeps/{coverage-llvmir-base => coverage-llvmir}/Makefile (98%) rename src/test/run-make-fulldeps/{coverage-llvmir-base => coverage-llvmir}/filecheck.testprog.txt (100%) rename src/test/run-make-fulldeps/{coverage-llvmir-base => coverage-llvmir}/testprog.rs (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/Makefile (99%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.abort.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.assert.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.async.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.closure.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.conditions.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.drop_trait.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.generics.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.if.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.if_else.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.inner_items.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.lazy_boolean.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.loop_break_value.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.loops_branches.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.nested_loops.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.overflow.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.panic_unwind.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.partial_eq.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.simple_loop.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.simple_match.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.tight_inf_loop.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.try_error_result.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.while.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.while_early_ret.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_export_coverage.yield.json (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.abort.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.assert.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.async.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.closure.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.conditions.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.drop_trait.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.generics.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.if.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.if_else.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.inner_items.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.lazy_boolean.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.loop_break_value.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.loops_branches.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.nested_loops.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.overflow.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.panic_unwind.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.partial_eq.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.simple_loop.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.simple_match.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.tight_inf_loop.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.try_error_result.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.while.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.while_early_ret.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage.yield.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.abort.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.assert.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.async.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.closure.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.conditions.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.drop_trait.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.generics.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.if.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.if_else.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.inner_items.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.lazy_boolean.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.loop_break_value.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.loops_branches.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.nested_loops.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.overflow.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.panic_unwind.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.partial_eq.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.simple_loop.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.simple_match.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.tight_inf_loop.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.try_error_result.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.while.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.while_early_ret.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/expected_show_coverage_counters.yield.txt (100%) rename src/test/run-make-fulldeps/{coverage-reports-base => coverage-reports}/prettify_json.py (100%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/Makefile (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/escape_url.py (100%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html (97%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html (96%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html (92%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html (93%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html (94%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html (93%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html (94%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html (96%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html (96%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html (96%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.closure/closure.main-{closure#0}.-------.InstrumentCoverage.0.html (96%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.closure/closure.main-{closure#1}.-------.InstrumentCoverage.0.html (96%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.closure/closure.main-{closure#2}.-------.InstrumentCoverage.0.html (96%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.closure/closure.main-{closure#3}.-------.InstrumentCoverage.0.html (96%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.closure/closure.main.-------.InstrumentCoverage.0.html (99%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html (99%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.drop_trait/drop_trait.main.-------.InstrumentCoverage.0.html (97%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.drop_trait/drop_trait.{impl#0}-drop.-------.InstrumentCoverage.0.html (97%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.generics/generics.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.generics/generics.{impl#0}-set_strength.-------.InstrumentCoverage.0.html (94%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.generics/generics.{impl#1}-drop.-------.InstrumentCoverage.0.html (97%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.if/if.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.if_else/if_else.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.inner_items/inner_items.main-InTrait-default_trait_func.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.inner_items/inner_items.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html (99%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.loop_break_value/loop_break_value.main.-------.InstrumentCoverage.0.html (97%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.loops_branches/loops_branches.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.loops_branches/loops_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html (97%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html (99%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html (99%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html (97%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.main.-------.InstrumentCoverage.0.html (99%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#0}-new.-------.InstrumentCoverage.0.html (96%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#1}-cmp.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html (93%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}.-------.InstrumentCoverage.0.html (94%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html (93%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}.-------.InstrumentCoverage.0.html (94%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html (93%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}.-------.InstrumentCoverage.0.html (94%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html (93%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}.-------.InstrumentCoverage.0.html (94%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#4}-assert_receiver_is_total_eq.-------.InstrumentCoverage.0.html (92%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#6}-eq.-------.InstrumentCoverage.0.html (94%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#6}-ne.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#7}-fmt.-------.InstrumentCoverage.0.html (96%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.partial_eq/partial_eq.{impl#8}-clone.-------.InstrumentCoverage.0.html (94%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.simple_match/simple_match.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.tight_inf_loop/tight_inf_loop.main.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.try_error_result/try_error_result.call.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html (96%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.while_early_ret/while_early_ret.main.-------.InstrumentCoverage.0.html (98%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.yield/yield.main-{closure#0}.-------.InstrumentCoverage.0.html (94%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html (95%) rename src/test/run-make-fulldeps/{coverage-spanview-base => coverage-spanview}/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html (98%) diff --git a/src/test/run-make-fulldeps/coverage-llvmir-deadcode/Makefile b/src/test/run-make-fulldeps/coverage-llvmir-deadcode/Makefile index 30c7c0fbb5133..1b3cd82bb0d1a 100644 --- a/src/test/run-make-fulldeps/coverage-llvmir-deadcode/Makefile +++ b/src/test/run-make-fulldeps/coverage-llvmir-deadcode/Makefile @@ -4,7 +4,7 @@ # LINK_DEAD_CODE requires ignore-msvc due to Issue #76038 LINK_DEAD_CODE=yes --include ../coverage-llvmir-base/Makefile +-include ../coverage-llvmir/Makefile # ISSUE(76038): When targeting MSVC, Rust binaries built with both `-Z instrument-coverage` and # `-C link-dead-code` typically crash (with a seg-fault) or at best generate an empty `*.profraw`. diff --git a/src/test/run-make-fulldeps/coverage-llvmir-base/Makefile b/src/test/run-make-fulldeps/coverage-llvmir/Makefile similarity index 98% rename from src/test/run-make-fulldeps/coverage-llvmir-base/Makefile rename to src/test/run-make-fulldeps/coverage-llvmir/Makefile index 219ba15ad116d..bd6cd0ee49507 100644 --- a/src/test/run-make-fulldeps/coverage-llvmir-base/Makefile +++ b/src/test/run-make-fulldeps/coverage-llvmir/Makefile @@ -6,7 +6,7 @@ -include ../coverage/coverage_tools.mk -BASEDIR=../coverage-llvmir-base +BASEDIR=../coverage-llvmir ifeq ($(UNAME),Darwin) INSTR_PROF_DATA_SUFFIX=,regular,live_support diff --git a/src/test/run-make-fulldeps/coverage-llvmir-base/filecheck.testprog.txt b/src/test/run-make-fulldeps/coverage-llvmir/filecheck.testprog.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-llvmir-base/filecheck.testprog.txt rename to src/test/run-make-fulldeps/coverage-llvmir/filecheck.testprog.txt diff --git a/src/test/run-make-fulldeps/coverage-llvmir-base/testprog.rs b/src/test/run-make-fulldeps/coverage-llvmir/testprog.rs similarity index 100% rename from src/test/run-make-fulldeps/coverage-llvmir-base/testprog.rs rename to src/test/run-make-fulldeps/coverage-llvmir/testprog.rs diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/Makefile b/src/test/run-make-fulldeps/coverage-reports-deadcode/Makefile index b6a9acbf18b3c..0d40ffee764d4 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/Makefile +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/Makefile @@ -8,7 +8,7 @@ # LINK_DEAD_CODE requires ignore-msvc due to Issue #76038 LINK_DEAD_CODE=yes --include ../coverage-reports-base/Makefile +-include ../coverage-reports/Makefile # ISSUE(76038): When targeting MSVC, Rust binaries built with both `-Z instrument-coverage` and # `-C link-dead-code` typically crash (with a seg-fault) or at best generate an empty `*.profraw`. diff --git a/src/test/run-make-fulldeps/coverage-reports-base/Makefile b/src/test/run-make-fulldeps/coverage-reports/Makefile similarity index 99% rename from src/test/run-make-fulldeps/coverage-reports-base/Makefile rename to src/test/run-make-fulldeps/coverage-reports/Makefile index 6ccff43dcdfd8..91acedb68ec36 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/Makefile +++ b/src/test/run-make-fulldeps/coverage-reports/Makefile @@ -10,7 +10,7 @@ -include ../coverage/coverage_tools.mk -BASEDIR=../coverage-reports-base +BASEDIR=../coverage-reports SOURCEDIR=../coverage # The `llvm-cov show` flag `--debug`, used to generate the `counters` output files, is only enabled diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.abort.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.abort.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.abort.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.abort.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.assert.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.assert.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.assert.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.assert.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.async.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.async.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.async.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.async.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.closure.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.closure.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.closure.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.closure.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.conditions.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.conditions.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.conditions.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.conditions.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.drop_trait.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.drop_trait.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.drop_trait.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.drop_trait.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.generics.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.generics.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.generics.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.generics.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.if.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.if.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.if.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.if.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.if_else.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.if_else.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.if_else.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.if_else.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.inner_items.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.inner_items.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.inner_items.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.inner_items.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.lazy_boolean.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.lazy_boolean.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.lazy_boolean.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.lazy_boolean.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.loop_break_value.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.loop_break_value.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.loop_break_value.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.loop_break_value.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.loops_branches.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.loops_branches.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.loops_branches.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.loops_branches.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.nested_loops.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.nested_loops.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.nested_loops.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.nested_loops.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.overflow.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.overflow.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.overflow.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.overflow.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.panic_unwind.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.panic_unwind.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.panic_unwind.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.panic_unwind.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.partial_eq.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.partial_eq.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.partial_eq.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.partial_eq.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.simple_loop.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.simple_loop.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.simple_loop.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.simple_loop.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.simple_match.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.simple_match.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.simple_match.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.simple_match.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.tight_inf_loop.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.tight_inf_loop.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.tight_inf_loop.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.tight_inf_loop.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.try_error_result.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.try_error_result.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.try_error_result.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.try_error_result.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.while.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.while.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while_early_ret.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.while_early_ret.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while_early_ret.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.while_early_ret.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.yield.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.yield.json similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.yield.json rename to src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.yield.json diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.abort.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.abort.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.abort.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.abort.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.assert.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.assert.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.assert.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.assert.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.async.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.async.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.async.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.async.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.closure.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.closure.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.closure.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.closure.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.conditions.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.conditions.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.conditions.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.conditions.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.drop_trait.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.drop_trait.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.drop_trait.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.drop_trait.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.generics.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.generics.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.generics.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.generics.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.if.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.if.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.if.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.if.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.if_else.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.if_else.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.if_else.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.if_else.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.inner_items.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.inner_items.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.inner_items.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.inner_items.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.lazy_boolean.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.lazy_boolean.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.lazy_boolean.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.lazy_boolean.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.loop_break_value.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loop_break_value.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.loop_break_value.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loop_break_value.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.loops_branches.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loops_branches.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.loops_branches.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loops_branches.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.nested_loops.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.nested_loops.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.nested_loops.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.nested_loops.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.overflow.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.overflow.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.overflow.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.overflow.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.panic_unwind.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.panic_unwind.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.panic_unwind.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.panic_unwind.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.partial_eq.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.partial_eq.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.partial_eq.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.partial_eq.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.simple_loop.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.simple_loop.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.simple_loop.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.simple_loop.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.simple_match.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.simple_match.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.simple_match.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.simple_match.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.tight_inf_loop.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.tight_inf_loop.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.tight_inf_loop.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.tight_inf_loop.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.try_error_result.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.try_error_result.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.try_error_result.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.try_error_result.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.while.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.while.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.while.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.while.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.while_early_ret.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.while_early_ret.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.while_early_ret.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.while_early_ret.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.yield.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.yield.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.yield.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.yield.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.abort.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.abort.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.abort.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.abort.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.assert.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.assert.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.assert.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.assert.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.async.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.async.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.async.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.async.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.closure.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.closure.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.closure.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.closure.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.conditions.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.conditions.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.conditions.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.conditions.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.drop_trait.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.drop_trait.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.drop_trait.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.drop_trait.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.generics.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.generics.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.generics.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.generics.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.if.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.if.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.if.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.if.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.if_else.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.if_else.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.if_else.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.if_else.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.inner_items.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.inner_items.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.inner_items.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.inner_items.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.lazy_boolean.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.lazy_boolean.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.lazy_boolean.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.lazy_boolean.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.loop_break_value.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.loop_break_value.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.loop_break_value.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.loop_break_value.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.loops_branches.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.loops_branches.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.loops_branches.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.loops_branches.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.nested_loops.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.nested_loops.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.nested_loops.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.nested_loops.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.overflow.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.overflow.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.overflow.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.overflow.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.panic_unwind.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.panic_unwind.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.panic_unwind.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.panic_unwind.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.partial_eq.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.partial_eq.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.partial_eq.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.partial_eq.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.simple_loop.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.simple_loop.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.simple_loop.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.simple_loop.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.simple_match.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.simple_match.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.simple_match.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.simple_match.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.tight_inf_loop.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.tight_inf_loop.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.tight_inf_loop.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.tight_inf_loop.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.try_error_result.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.try_error_result.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.try_error_result.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.try_error_result.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.while.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.while.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while_early_ret.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.while_early_ret.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while_early_ret.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.while_early_ret.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.yield.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.yield.txt similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.yield.txt rename to src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.yield.txt diff --git a/src/test/run-make-fulldeps/coverage-reports-base/prettify_json.py b/src/test/run-make-fulldeps/coverage-reports/prettify_json.py similarity index 100% rename from src/test/run-make-fulldeps/coverage-reports-base/prettify_json.py rename to src/test/run-make-fulldeps/coverage-reports/prettify_json.py diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/Makefile b/src/test/run-make-fulldeps/coverage-spanview-deadcode/Makefile index 826e85b35e5ff..2bc61fccde46e 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/Makefile +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/Makefile @@ -4,7 +4,7 @@ # LINK_DEAD_CODE requires ignore-msvc due to Issue #76038 LINK_DEAD_CODE=yes --include ../coverage-spanview-base/Makefile +-include ../coverage-spanview/Makefile # ISSUE(76038): When targeting MSVC, Rust binaries built with both `-Z instrument-coverage` and # `-C link-dead-code` typically crash (with a seg-fault) or at best generate an empty `*.profraw`. diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html index a8227cffc60f6..63f7d2dd2d9ff 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ - - -abort.main - Coverage Spans - - - -
fn main() -> Result<(),u8> { - let @0⦊mut countdown = 10⦉@0; - while @1,2⦊countdown > 0⦉@1,2 { - if @3,5⦊countdown < 5⦉@3,5 @6,8,9⦊{ - might_abort(false); - }⦉@6,8,9@7⦊⦉@7 - @10,11⦊countdown -= 1⦉@10,11; - } - @4⦊Ok(()) -}⦉@4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html deleted file mode 100644 index 444ca72ce4c10..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - -abort.might_abort - Coverage Spans - - - -
fn might_abort(should_abort: bool) { - if @0⦊should_abort⦉@0 { - @1,3,4,5⦊println!("aborting..."); - panic!("panics and aborts");⦉@1,3,4,5 - } else @2,6,7⦊{ - println!("Don't Panic"); - } -}⦉@2,6,7
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index d84e200cc1a62..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - -assert.main - Coverage Spans - - - -
fn main() -> Result<(),u8> { - let @0⦊mut countdown = 10⦉@0; - while @1,2⦊countdown > 0⦉@1,2 { - if @3,5⦊countdown == 1⦉@3,5 @6,8,9⦊{ - might_fail_assert(3); - }⦉@6,8,9 else if @7⦊countdown < 5⦉@7 @10,12,13⦊{ - might_fail_assert(2); - }⦉@10,12,13@11⦊⦉@11@14⦊⦉@14 - @15,16⦊countdown -= 1⦉@15,16; - } - @4⦊Ok(()) -}⦉@4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html deleted file mode 100644 index c03fc8e416e5e..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - -assert.might_fail_assert - Coverage Spans - - - -
fn might_fail_assert(one_plus_one: u32) { - @0,1,2,3,4⦊println!("does 1 + 1 = {}?", one_plus_one);⦉@0,1,2,3,4 - assert_eq!(@0,1,2,3,4⦊1 + 1⦉@0,1,2,3,4, one_plus_one, @5,7,8,9,10,11,12⦊"the argument was wrong"⦉@5,7,8,9,10,11,12); -}@6⦊⦉@6
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index 4689c34ca0fba..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - -async.executor-block_on-VTABLE-{closure#0} - Coverage Spans - - - -
{ - @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 - }
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html deleted file mode 100644 index ccfb1dd0a37c3..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - -async.executor-block_on-VTABLE-{closure#1} - Coverage Spans - - - -
{ - @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 - }
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html deleted file mode 100644 index 2d402b83081c3..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - -async.executor-block_on-VTABLE-{closure#2} - Coverage Spans - - - -
{ - @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 - }
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html deleted file mode 100644 index 583a67e6c7fb7..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - -async.executor-block_on - Coverage Spans - - - -
pub fn block_on<F: Future>(mut future: F) -> F::Output { - let @0,1,2,3,4,5⦊mut future = unsafe { Pin::new_unchecked(&mut future) }; - - static VTABLE: RawWakerVTable = RawWakerVTable::new( - |_| unimplemented!("clone"), - |_| unimplemented!("wake"), - |_| unimplemented!("wake_by_ref"), - |_| (), - ); - let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; - let mut context = Context::from_waker(&waker)⦉@0,1,2,3,4,5; - - loop { - if let Poll::Ready(@10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17) = @6,7,8,9⦊future.as_mut().poll(&mut context)⦉@6,7,8,9 { - break @10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17; - } - }@11,13⦊⦉@11,13 - }@10,12,14,15,16,17⦊⦉@10,12,14,15,16,17
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index d3b9609a7f34d..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - -async.foo-{closure#0} - Coverage Spans - - - -
{ @0⦊[false; 10] }⦉@0
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index 9967a387a05db..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - -async.g-{closure#0} - Coverage Spans - - - -
@0,2,3⦊{ - match x⦉@0,2,3 { - @16⦊y⦉@16 if @0,2,3⦊f()⦉@0,2,3.await == @9,12,14,15⦊y⦉@9,12,14,15@17⦊⦉@17 => @16⦊()⦉@16, - _ => @1⦊()⦉@1, - } -}@18,19⦊⦉@18,19
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index 986a4b198cbe0..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - -async.h-{closure#0} - Coverage Spans - - - -
@0,2,3⦊{ - match x⦉@0,2,3 { - @17⦊y⦉@17 if @0,2,3⦊foo()⦉@0,2,3.await[@9,12,14,15,16⦊y⦉@9,12,14,15,16]@18⦊⦉@18 => @17⦊()⦉@17, - _ => @1⦊()⦉@1, - } -}@19,20⦊⦉@19,20
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index ab9bbf85dd7a1..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -async.i-{closure#0} - Coverage Spans - - - -
@0,2,3⦊{ - match x⦉@0,2,3 { - @17⦊y⦉@17 if @0,2,3⦊f()⦉@0,2,3.await == @9,12,14,15,16⦊y + 1⦉@9,12,14,15,16@18⦊⦉@18 => @17⦊()⦉@17, - _ => @1⦊()⦉@1, - } -}@19,20⦊⦉@19,20
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 007da5c0ec109..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - -async.main - Coverage Spans - - - -
fn main() @0,1,2,3,4,5,6,7,8,9⦊{ - let _ = g(10); - let _ = h(9); - let mut future = Box::pin(i(8)); - executor::block_on(future.as_mut()); -}⦉@0,1,2,3,4,5,6,7,8,9
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.closure/closure.main-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.closure/closure.main-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index b68c0a1cabe35..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.closure/closure.main-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - -closure.main-{closure#0} - Coverage Spans - - - -
|| - { - let @0⦊mut countdown = 0⦉@0; - if @0⦊is_false⦉@0 @1,3⦊{ - countdown = 10; - }⦉@1,3@2⦊⦉@2 - @4,5⦊"alt string 2".to_owned() - }⦉@4,5
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.closure/closure.main-{closure#1}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.closure/closure.main-{closure#1}.-------.InstrumentCoverage.0.html deleted file mode 100644 index 9358fd4b13670..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.closure/closure.main-{closure#1}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - -closure.main-{closure#1} - Coverage Spans - - - -
|| - { - let @0⦊mut countdown = 0⦉@0; - if @0⦊is_false⦉@0 @1,3⦊{ - countdown = 10; - }⦉@1,3@2⦊⦉@2 - @4,5⦊"alt string 4".to_owned() - }⦉@4,5
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.closure/closure.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.closure/closure.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 2d41918efb2ec..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.closure/closure.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,4515 +0,0 @@ - - - - -closure.main - Coverage Spans - - - -
fn main() @0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34⦊{ - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let is_true = std::env::args().len() == 1; - let is_false = ! is_true; - - let mut some_string = Some(String::from("the string content")); - println!( - "The string or alt: {}" - , - some_string - . - unwrap_or_else - ( - ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34|| - { - let mut countdown = 0; - if is_false { - countdown = 10; - } - "alt string 1".to_owned() - }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34⦊ - ) - ); - - some_string = Some(String::from("the string content")); - let - a - = - ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34|| - { - let mut countdown = 0; - if is_false { - countdown = 10; - } - "alt string 2".to_owned() - }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34⦊; - println!( - "The string or alt: {}" - , - some_string - . - unwrap_or_else - ( - a - ) - ); - - some_string = None; - println!( - "The string or alt: {}" - , - some_string - . - unwrap_or_else - ( - ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34|| - { - let mut countdown = 0; - if is_false { - countdown = 10; - } - "alt string 3".to_owned() - }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34⦊ - ) - ); - - some_string = None; - let - a - = - ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34|| - { - let mut countdown = 0; - if is_false { - countdown = 10; - } - "alt string 4".to_owned() - }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34⦊; - println!( - "The string or alt: {}" - , - some_string - . - unwrap_or_else - ( - a - ) - ); -}⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index e6f95385910dc..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,353 +0,0 @@ - - - - -conditions.main - Coverage Spans - - - -
fn main() { - let @0⦊mut countdown = 0⦉@0; - if @0⦊true⦉@0 @1,3⦊{ - countdown = 10; - }⦉@1,3@2⦊⦉@2 - - const B: u32 = 100; - let @25⦊x⦉@25 = if @4⦊countdown > 7⦉@4 { - @5,7,8⦊countdown -= 4; - B⦉@5,7,8 - } else if @6⦊countdown > 2⦉@6 { - if @9,11⦊countdown < 1⦉@9,11 || @18⦊countdown > 5⦉@18@16⦊⦉@16@17⦊⦉@17 || @14⦊countdown != 9⦉@14@12⦊⦉@12@13⦊⦉@13 @20,22⦊{ - countdown = 0; - }⦉@20,22@21⦊⦉@21 - @23,24⦊countdown -= 5; - countdown⦉@23,24 - } else { - @10⦊return⦉@10; - }; - - let @25⦊mut countdown = 0⦉@25; - if @25⦊true⦉@25 @26,28⦊{ - countdown = 10; - }⦉@26,28@27⦊⦉@27 - - if @29⦊countdown > 7⦉@29 @30,32,33⦊{ - countdown -= 4; - }⦉@30,32,33 else if @31⦊countdown > 2⦉@31 { - if @34,36⦊countdown < 1⦉@34,36 || @43⦊countdown > 5⦉@43@41⦊⦉@41@42⦊⦉@42 || @39⦊countdown != 9⦉@39@37⦊⦉@37@38⦊⦉@38 @45,47⦊{ - countdown = 0; - }⦉@45,47@46⦊⦉@46 - @48,49⦊countdown -= 5⦉@48,49; - } else { - @35⦊return⦉@35; - } - - if @50⦊true⦉@50 { - // Demonstrate the difference with `TerminatorKind::Assert` as of 2020-11-15. Assert is no - // longer treated as a `BasicCoverageBlock` terminator, which changed the coverage region, - // for the executed `then` block above, to include the closing brace on line 30. That - // changed the line count, but the coverage code region (for the `else if` condition) is - // still valid. - // - // Note that `if` (then) and `else` blocks include the closing brace in their coverage - // code regions when the last line in the block ends in a semicolon, because the Rust - // compiler inserts a `StatementKind::Assign` to assign `const ()` to a `Place`, for the - // empty value for the executed block. When the last line does not end in a semicolon - // (that is, when the block actually results in a value), the additional `Assign` is not - // generated, and the brace is not included. - let @51,53⦊mut countdown = 0⦉@51,53; - if @51,53⦊true⦉@51,53 @54,56⦊{ - countdown = 10; - }⦉@54,56@55⦊⦉@55 - - if @57⦊countdown > 7⦉@57 @58,60,61⦊{ - countdown -= 4; - }⦉@58,60,61 - // The closing brace of the `then` branch is now included in the coverage region, and shown - // as "executed" (giving its line a count of 1 here). Since, in the original version above, - // the closing brace shares the same line as the `else if` conditional expression (which is - // not executed if the first `then` condition is true), only the condition's code region is - // marked with a count of 0 now. - else if @59⦊countdown > 2⦉@59 { - if @62,64⦊countdown < 1⦉@62,64 || @71⦊countdown > 5⦉@71@69⦊⦉@69@70⦊⦉@70 || @67⦊countdown != 9⦉@67@65⦊⦉@65@66⦊⦉@66 @73,75⦊{ - countdown = 0; - }⦉@73,75@74⦊⦉@74 - @76,77⦊countdown -= 5⦉@76,77; - } else { - @63⦊return⦉@63; - } - }@78⦊⦉@78@52⦊⦉@52 - - let @79⦊mut countdown = 0⦉@79; - if @79⦊true⦉@79 @80,82⦊{ - countdown = 1; - }⦉@80,82@81⦊⦉@81 - - let @106⦊z⦉@106 = if @83⦊countdown > 7⦉@83 @84,86,87⦊{ - countdown -= 4; - }⦉@84,86,87 else if @85⦊countdown > 2⦉@85 { - if @88,90⦊countdown < 1⦉@88,90 || @97⦊countdown > 5⦉@97@95⦊⦉@95@96⦊⦉@96 || @93⦊countdown != 9⦉@93@91⦊⦉@91@92⦊⦉@92 @99,101⦊{ - countdown = 0; - }⦉@99,101@100⦊⦉@100 - @102,103⦊countdown -= 5⦉@102,103; - } else { - let @89,104,105⦊should_be_reachable = countdown; - println!("reached"); - return⦉@89,104,105; - }; - - let @127⦊w⦉@127 = if @106⦊countdown > 7⦉@106 @107,109,110⦊{ - countdown -= 4; - }⦉@107,109,110 else if @108⦊countdown > 2⦉@108 { - if @111,113⦊countdown < 1⦉@111,113 || @120⦊countdown > 5⦉@120@118⦊⦉@118@119⦊⦉@119 || @116⦊countdown != 9⦉@116@114⦊⦉@114@115⦊⦉@115 @122,124⦊{ - countdown = 0; - }⦉@122,124@123⦊⦉@123 - @125,126⦊countdown -= 5⦉@125,126; - } else { - @112⦊return⦉@112; - }; -}@130⦊⦉@130@131⦊⦉@131
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.drop_trait/drop_trait.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.drop_trait/drop_trait.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 8d6f936aadcbc..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.drop_trait/drop_trait.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - -drop_trait.main - Coverage Spans - - - -
fn main() -> Result<(),u8> { - let @0⦊_firecracker = Firework { strength: 1 }; - - let _tnt = Firework { strength: 100 }⦉@0; - - if @0⦊true⦉@0 { - @1,3,4,5,9,10⦊println!("Exiting with error..."); - return Err(1)⦉@1,3,4,5,9,10; - } - - let _ = @2,6,7,8⦊Firework { strength: 1000 }; - - Ok(())⦉@2,6,7,8 -}@11⦊⦉@11
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.drop_trait/drop_trait.{impl#0}-drop.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.drop_trait/drop_trait.{impl#0}-drop.-------.InstrumentCoverage.0.html deleted file mode 100644 index 60a24df9ba6b0..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.drop_trait/drop_trait.{impl#0}-drop.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - -drop_trait.{impl#0}-drop - Coverage Spans - - - -
fn drop(&mut self) @0,1,2,3⦊{ - println!("BOOM times {}!!!", self.strength); - }⦉@0,1,2,3
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.generics/generics.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.generics/generics.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 3f90fd1e8215a..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.generics/generics.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - -generics.main - Coverage Spans - - - -
fn main() -> Result<(),u8> { - let @0,1,2,3⦊mut firecracker = Firework { strength: 1 }; - firecracker.set_strength(2); - - let mut tnt = Firework { strength: 100.1 }; - tnt.set_strength(200.1); - tnt.set_strength(300.3)⦉@0,1,2,3; - - if @0,1,2,3⦊true⦉@0,1,2,3 { - @4,6,7,8,12,13⦊println!("Exiting with error..."); - return Err(1)⦉@4,6,7,8,12,13; - } - - let _ = @5,9,10,11⦊Firework { strength: 1000 }; - - Ok(())⦉@5,9,10,11 -}@14⦊⦉@14
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.generics/generics.{impl#0}-set_strength.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.generics/generics.{impl#0}-set_strength.-------.InstrumentCoverage.0.html deleted file mode 100644 index b10da561da91d..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.generics/generics.{impl#0}-set_strength.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - -generics.{impl#0}-set_strength - Coverage Spans - - - -
fn set_strength(&mut self, new_strength: T) @0⦊{ - self.strength = new_strength; - }⦉@0
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.generics/generics.{impl#1}-drop.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.generics/generics.{impl#1}-drop.-------.InstrumentCoverage.0.html deleted file mode 100644 index 0515e8d7b8cb4..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.generics/generics.{impl#1}-drop.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - -generics.{impl#1}-drop - Coverage Spans - - - -
fn drop(&mut self) @0,1,2,3⦊{ - println!("BOOM times {}!!!", self.strength); - }⦉@0,1,2,3
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.if/if.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.if/if.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index e926079a42897..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.if/if.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - -if.main - Coverage Spans - - - -
fn main() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let - @0,1,2,3⦊is_true - = - std::env::args().len() - == - 1 - ; - let - mut - countdown - = - 0⦉@0,1,2,3 - ; - if - @0,1,2,3⦊is_true⦉@0,1,2,3 - @4,6⦊{ - countdown - = - 10 - ; - }⦉@4,6@5⦊⦉@5 -}@7⦊⦉@7
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.if_else/if_else.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.if_else/if_else.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 586014afebaf7..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.if_else/if_else.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - -if_else.main - Coverage Spans - - - -
fn main() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let @0,1,2,3⦊is_true = std::env::args().len() == 1; - - let mut countdown = 0; - if - is_true⦉@0,1,2,3 - @4,6⦊{ - countdown - = - 10 - ; - }⦉@4,6 - else // Note coverage region difference without semicolon - { - @5⦊countdown - = - 100⦉@5 - } - - if - @7⦊is_true⦉@7 - @8,10⦊{ - countdown - = - 10 - ; - }⦉@8,10 - else - @9⦊{ - countdown - = - 100 - ; - }⦉@9 -}@11⦊⦉@11
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-InTrait-default_trait_func.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-InTrait-default_trait_func.-------.InstrumentCoverage.0.html deleted file mode 100644 index 387f2ba4e4139..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-InTrait-default_trait_func.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - -inner_items.main-InTrait-default_trait_func - Coverage Spans - - - -
fn default_trait_func(&mut self) @0,1,2⦊{ - in_func(IN_CONST); - self.trait_func(IN_CONST); - }⦉@0,1,2
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html deleted file mode 100644 index cec099a0ef529..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-in_func.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - -inner_items.main-in_func - Coverage Spans - - - -
fn in_func(a: u32) { - let @0,1,2,3,4⦊b = 1; - let c = a + b; - println!("c = {}", c) - }⦉@0,1,2,3,4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html deleted file mode 100644 index eaecb183ca110..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main-{impl#0}-trait_func.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - -inner_items.main-{impl#0}-trait_func - Coverage Spans - - - -
fn trait_func(&mut self, incr: u32) @0,1,2⦊{ - self.in_struct_field += incr; - in_func(self.in_struct_field); - }⦉@0,1,2
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 3e54d6566b481..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.inner_items/inner_items.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - -inner_items.main - Coverage Spans - - - -
fn main() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let @0,1,2,3⦊is_true = std::env::args().len() == 1; - - let mut countdown = 0⦉@0,1,2,3; - if @0,1,2,3⦊is_true⦉@0,1,2,3 @4,6⦊{ - countdown = 10; - }⦉@4,6@5⦊⦉@5 - - mod in_mod { - const IN_MOD_CONST: u32 = 1000; - } - - fn in_func(a: u32) { - let b = 1; - let c = a + b; - println!("c = {}", c) - } - - struct InStruct { - in_struct_field: u32, - } - - const IN_CONST: u32 = 1234; - - trait InTrait { - fn trait_func(&mut self, incr: u32); - - fn default_trait_func(&mut self) { - in_func(IN_CONST); - self.trait_func(IN_CONST); - } - } - - impl InTrait for InStruct { - fn trait_func(&mut self, incr: u32) { - self.in_struct_field += incr; - in_func(self.in_struct_field); - } - } - - type InType = String; - - if @7⦊is_true⦉@7 @8,10,11⦊{ - in_func(countdown); - }⦉@8,10,11@9⦊⦉@9 - - let @12,13⦊mut val = InStruct { - in_struct_field: 101, - }; - - val.default_trait_func(); -}⦉@12,13
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index dd21c23acf6b3..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - -lazy_boolean.main - Coverage Spans - - - -
fn main() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let @0,1,2,3⦊is_true = std::env::args().len() == 1; - - let (mut a, mut b, mut c) = (0, 0, 0)⦉@0,1,2,3; - if @0,1,2,3⦊is_true⦉@0,1,2,3 @4,6⦊{ - a = 1; - b = 10; - c = 100; - }⦉@4,6@5⦊⦉@5 - let - @11⦊somebool⦉@11 - = - @7⦊a < b⦉@7 - || - @10⦊b < c⦉@10@8⦊⦉@8@9⦊⦉@9 - ; - let - @15⦊somebool⦉@15 - = - @11⦊b < a⦉@11 - || - @14⦊b < c⦉@14@12⦊⦉@12@13⦊⦉@13 - ; - let @19⦊somebool⦉@19 = @15⦊a < b⦉@15 && @18⦊b < c⦉@18@16⦊⦉@16@17⦊⦉@17; - let @23⦊somebool⦉@23 = @19⦊b < a⦉@19 && @22⦊b < c⦉@22@20⦊⦉@20@21⦊⦉@21; - - if - @23⦊! - is_true⦉@23 - @24,26⦊{ - a = 2 - ; - }⦉@24,26@25⦊⦉@25 - - if - @27⦊is_true⦉@27 - @28,30⦊{ - b = 30 - ; - }⦉@28,30 - else - @29⦊{ - c = 400 - ; - }⦉@29 - - if @31⦊!is_true⦉@31 @32,34⦊{ - a = 2; - }⦉@32,34@33⦊⦉@33 - - if @35⦊is_true⦉@35 @36,38⦊{ - b = 30; - }⦉@36,38 else @37⦊{ - c = 400; - }⦉@37 -}@39⦊⦉@39
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loop_break_value/loop_break_value.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loop_break_value/loop_break_value.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index eff27bf3557a9..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loop_break_value/loop_break_value.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - -loop_break_value.main - Coverage Spans - - - -
fn main() @0,1⦊{ - let result - = - loop - { - break - 10 - ; - } - ; -}⦉@0,1
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loops_branches/loops_branches.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loops_branches/loops_branches.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 73b3e20946c04..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loops_branches/loops_branches.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - -loops_branches.main - Coverage Spans - - - -
fn main() @0,1,2,3⦊{ - let debug_test = DebugTest; - println!("{:?}", debug_test); -}⦉@0,1,2,3
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loops_branches/loops_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loops_branches/loops_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html deleted file mode 100644 index a98ed9e8ce182..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loops_branches/loops_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - -loops_branches.{impl#0}-fmt - Coverage Spans - - - -
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - if @0⦊true⦉@0 { - if @1,3⦊false⦉@1,3 { - while @6,7⦊true⦉@6,7 @8,10⦊{ - }⦉@8,10 - }@9⦊⦉@9@5⦊⦉@5 - @11,12,13,14⦊write!(f, "error")⦉@11,12,13,14@16,18,19,20⦊?⦉@16,18,19,20; - } else @2⦊{ - }⦉@2@15⦊⦉@15 - @21⦊Ok(())⦉@21 - }@22⦊⦉@22
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 0f3ea3ce6a89d..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - -nested_loops.main - Coverage Spans - - - -
fn main() { - let @0,1,2,3⦊is_true = std::env::args().len() == 1; - let mut countdown = 10⦉@0,1,2,3; - - 'outer: while @4,5⦊countdown > 0⦉@4,5 { - let @6,8,9⦊mut a = 100; - let mut b = 100⦉@6,8,9; - for @14,16⦊_⦉@14,16 in @10,11,12⦊0..50⦉@10,11,12 { - if @14,16⦊a < 30⦉@14,16 { - @17,19⦊break⦉@17,19; - } - @18,20,21⦊a -= 5; - b -= 5⦉@18,20,21; - if @18,20,21⦊b < 90⦉@18,20,21 { - @22,24,25⦊a -= 10; - if is_true⦉@22,24,25 { - @26,28⦊break 'outer⦉@26,28; - } else @27,29⦊{ - a -= 2; - } - }⦉@27,29@23⦊⦉@23 - }@30⦊⦉@30 - @31,32⦊countdown -= 1⦉@31,32; - }@7⦊⦉@7 -}@33⦊⦉@33
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 4f237d6561d33..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,259 +0,0 @@ - - - - -overflow.main - Coverage Spans - - - -
fn main() -> Result<(),u8> { - let @0⦊mut countdown = 10⦉@0; - while @1,2⦊countdown > 0⦉@1,2 { - if @3,5⦊countdown == 1⦉@3,5 @6,8,9,10,11,12⦊{ - let result = might_overflow(10); - println!("Result: {}", result); - }⦉@6,8,9,10,11,12 else if @7⦊countdown < 5⦉@7 @13,15,16,17,18,19⦊{ - let result = might_overflow(1); - println!("Result: {}", result); - }⦉@13,15,16,17,18,19@14⦊⦉@14@20⦊⦉@20 - @21,22⦊countdown -= 1⦉@21,22; - } - @4⦊Ok(()) -}⦉@4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html deleted file mode 100644 index b1dbc40ee206d..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,397 +0,0 @@ - - - - -overflow.might_overflow - Coverage Spans - - - -
fn might_overflow(to_add: u32) -> u32 { - if @0⦊to_add > 5⦉@0 @1,3,4,5⦊{ - println!("this will probably overflow"); - }⦉@1,3,4,5@2⦊⦉@2 - let @6,7,8,9,10,11,12,13,14⦊add_to = u32::MAX - 5; - println!("does {} + {} overflow?", add_to, to_add); - let result = to_add + add_to; - println!("continuing after overflow check"); - result -}⦉@6,7,8,9,10,11,12,13,14
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index ebacd80c37dea..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - -panic_unwind.main - Coverage Spans - - - -
fn main() -> Result<(),u8> { - let @0⦊mut countdown = 10⦉@0; - while @1,2⦊countdown > 0⦉@1,2 { - if @3,5⦊countdown == 1⦉@3,5 @6,8,9⦊{ - might_panic(true); - }⦉@6,8,9 else if @7⦊countdown < 5⦉@7 @10,12,13⦊{ - might_panic(false); - }⦉@10,12,13@11⦊⦉@11@14⦊⦉@14 - @15,16⦊countdown -= 1⦉@15,16; - } - @4⦊Ok(()) -}⦉@4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html deleted file mode 100644 index d6002e70af277..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - -panic_unwind.might_panic - Coverage Spans - - - -
fn might_panic(should_panic: bool) { - if @0⦊should_panic⦉@0 { - @1,3,4,5⦊println!("panicking..."); - panic!("panics");⦉@1,3,4,5 - } else @2,6,7⦊{ - println!("Don't Panic"); - } -}⦉@2,6,7
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 0c6d81a18b14a..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - -partial_eq.main - Coverage Spans - - - -
fn main() @0,1,2,3,4,5,6,7,8⦊{ - let version_3_2_1 = Version::new(3, 2, 1); - let version_3_3_0 = Version::new(3, 3, 0); - - println!("{:?} < {:?} = {}", version_3_2_1, version_3_3_0, version_3_2_1 < version_3_3_0); -}⦉@0,1,2,3,4,5,6,7,8
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#0}-new.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#0}-new.-------.InstrumentCoverage.0.html deleted file mode 100644 index a888cb14d1d44..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#0}-new.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - -partial_eq.{impl#0}-new - Coverage Spans - - - -
pub fn new(major: usize, minor: usize, patch: usize) -> Self { - @0⦊Self { - major, - minor, - patch, - } - }⦉@0
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#1}-cmp.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#1}-cmp.-------.InstrumentCoverage.0.html deleted file mode 100644 index fa81a7f8afcd4..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#1}-cmp.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - -partial_eq.{impl#1}-cmp - Coverage Spans - - - -
@14⦊@11,12⦊@13⦊Ord⦉@13⦉@11,12⦉@14@15⦊⦉@15
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index 52e6b52627693..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -partial_eq.{impl#2}-ge-{closure#0}-{closure#0} - Coverage Spans - - - -
minor: usize, - @0,1,2⦊patch: usize⦉@0,1,2
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index 9f0c29c50bf1b..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - -partial_eq.{impl#2}-ge-{closure#0} - Coverage Spans - - - -
major: usize, - @0,1,2,3⦊⦉@0,1,2,3minor: usize
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge.-------.InstrumentCoverage.0.html deleted file mode 100644 index b740a63aed9d1..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - -partial_eq.{impl#2}-ge - Coverage Spans - - - -
@0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd@0,1,2,3,4⦊⦉@0,1,2,3,4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index 0ad35d701aafd..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -partial_eq.{impl#2}-gt-{closure#0}-{closure#0} - Coverage Spans - - - -
minor: usize, - @0,1,2⦊patch: usize⦉@0,1,2
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index ff7e783dd68c1..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - -partial_eq.{impl#2}-gt-{closure#0} - Coverage Spans - - - -
major: usize, - @0,1,2,3⦊⦉@0,1,2,3minor: usize
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt.-------.InstrumentCoverage.0.html deleted file mode 100644 index 95b63edba87d5..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - -partial_eq.{impl#2}-gt - Coverage Spans - - - -
@0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd@0,1,2,3,4⦊⦉@0,1,2,3,4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index d43d8526a88e7..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -partial_eq.{impl#2}-le-{closure#0}-{closure#0} - Coverage Spans - - - -
minor: usize, - @0,1,2⦊patch: usize⦉@0,1,2
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index 6eb894a166a01..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - -partial_eq.{impl#2}-le-{closure#0} - Coverage Spans - - - -
major: usize, - @0,1,2,3⦊⦉@0,1,2,3minor: usize
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le.-------.InstrumentCoverage.0.html deleted file mode 100644 index 906d074b71fb6..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - -partial_eq.{impl#2}-le - Coverage Spans - - - -
@0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd@0,1,2,3,4⦊⦉@0,1,2,3,4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index a941c08da5d8c..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -partial_eq.{impl#2}-lt-{closure#0}-{closure#0} - Coverage Spans - - - -
minor: usize, - @0,1,2⦊patch: usize⦉@0,1,2
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index e54849345b7f1..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - -partial_eq.{impl#2}-lt-{closure#0} - Coverage Spans - - - -
major: usize, - @0,1,2,3⦊⦉@0,1,2,3minor: usize
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt.-------.InstrumentCoverage.0.html deleted file mode 100644 index 0da90113bddee..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - -partial_eq.{impl#2}-lt - Coverage Spans - - - -
@0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd@0,1,2,3,4⦊⦉@0,1,2,3,4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html deleted file mode 100644 index c5a806f7c1718..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - -partial_eq.{impl#2}-partial_cmp - Coverage Spans - - - -
@17⦊@14,15⦊@16⦊PartialOrd⦉@16⦉@14,15⦉@17@18⦊⦉@18
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#6}-eq.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#6}-eq.-------.InstrumentCoverage.0.html deleted file mode 100644 index 92f37e4b89a93..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#6}-eq.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - -partial_eq.{impl#6}-eq - Coverage Spans - - - -
@2⦊@1⦊PartialEq⦉@1⦉@2@4⦊⦉@4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#6}-ne.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#6}-ne.-------.InstrumentCoverage.0.html deleted file mode 100644 index df561a7922484..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#6}-ne.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - -partial_eq.{impl#6}-ne - Coverage Spans - - - -
@2⦊@5⦊@6⦊@1⦊PartialEq⦉@1⦉@6⦉@5⦉@2@4⦊⦉@4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#7}-fmt.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#7}-fmt.-------.InstrumentCoverage.0.html deleted file mode 100644 index 195ef4da7b484..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#7}-fmt.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - -partial_eq.{impl#7}-fmt - Coverage Spans - - - -
@0,1,2,3,4,5⦊Debug⦉@0,1,2,3,4,5
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 29d21cf7ba459..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - -simple_loop.main - Coverage Spans - - - -
fn main() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let @0,1,2,3⦊is_true = std::env::args().len() == 1; - - let mut countdown = 0⦉@0,1,2,3; - - if - @0,1,2,3⦊is_true⦉@0,1,2,3 - @4,6⦊{ - countdown - = - 10 - ; - }⦉@4,6@5⦊⦉@5 - - loop - { - if - @8,9⦊countdown - == - 0⦉@8,9 - { - @10,12⦊break⦉@10,12 - ; - } - @11,13⦊countdown - -= - 1⦉@11,13 - ; - }@7⦊⦉@7 -}@10,12⦊⦉@10,12
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.simple_match/simple_match.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.simple_match/simple_match.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index f1513d458ebb6..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.simple_match/simple_match.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - -simple_match.main - Coverage Spans - - - -
fn main() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let @0,1,2,3⦊is_true = std::env::args().len() == 1; - - let mut countdown = 1⦉@0,1,2,3; - if @0,1,2,3⦊is_true⦉@0,1,2,3 @4,6⦊{ - countdown = 0; - }⦉@4,6@5⦊⦉@5 - - for - @13,15,17⦊_⦉@13,15,17 - in - @9,10,11⦊0..2⦉@9,10,11 - { - let z - ; - match - @13,15,17⦊countdown⦉@13,15,17 - { - @18⦊x⦉@18 - if - @13,15,17⦊x - < - 1⦉@13,15,17@19⦊⦉@19 - => - @18⦊{ - z = countdown - ; - let y = countdown - ; - countdown = 10 - ; - }⦉@18 - _ - => - @16⦊{}⦉@16 - } - }@7,8⦊⦉@7,8@20⦊⦉@20 -}@12⦊⦉@12
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.tight_inf_loop/tight_inf_loop.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.tight_inf_loop/tight_inf_loop.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 5cf76ecf5c2cd..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.tight_inf_loop/tight_inf_loop.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - -tight_inf_loop.main - Coverage Spans - - - -
fn main() { - if @0⦊false⦉@0 { - @4,5⦊loop {}⦉@4,5@1,3⦊⦉@1,3 - } -}@2⦊⦉@2
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index b9391e26c86de..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - -try_error_result.main - Coverage Spans - - - -
fn main() -> Result<(),()> { - let @0,1⦊mut - countdown = 10⦉@0,1 - ; - for - @6,8,9⦊_⦉@6,8,9 - in - @2,3,4⦊0..10⦉@2,3,4 - { - @6,8,9⦊countdown - -= 1 - ; - if - countdown < 5⦉@6,8,9 - { - @10,12,13,14⦊call(/*return_error=*/ true)⦉@10,12,13,14@16,18,19,20⦊?⦉@16,18,19,20; - @15,21,22⦊call(/*return_error=*/ false)⦉@15,21,22@24,26,27,28⦊?⦉@24,26,27,28; - } - else - { - @11,29,30⦊call(/*return_error=*/ false)⦉@11,29,30@32,34,35,36⦊?⦉@32,34,35,36; - }@23⦊⦉@23@31⦊⦉@31 - }@37⦊⦉@37 - @5⦊Ok(())⦉@5 -}@38⦊⦉@38@39⦊⦉@39
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 05c010da7bc54..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - -while.main - Coverage Spans - - - -
fn main() { - let @0⦊num = 9⦉@0; - while @1,2⦊num >= 10⦉@1,2 @3,5⦊{ - }⦉@3,5 -}@4⦊⦉@4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while_early_ret/while_early_ret.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while_early_ret/while_early_ret.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 87ce501ca8cc6..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while_early_ret/while_early_ret.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - -while_early_ret.main - Coverage Spans - - - -
fn main() -> Result<(),u8> { - let @0⦊mut countdown = 10⦉@0; - while - @1,2⦊countdown - > - 0⦉@1,2 - { - if - @3,5⦊countdown - < - 5⦉@3,5 - { - return - if - @6,8⦊countdown - > - 8⦉@6,8 - { - @9,11⦊Ok(())⦉@9,11 - } - else - { - @10⦊Err(1)⦉@10 - } - ; - } - @7,12⦊countdown - -= - 1⦉@7,12 - ; - } - @4⦊Ok(())⦉@4 -}@13⦊⦉@13@14⦊⦉@14
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main-{closure#0}.-------.InstrumentCoverage.0.html deleted file mode 100644 index b8458f9d8d655..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main-{closure#0}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - -yield.main-{closure#0} - Coverage Spans - - - -
|| { - @0⦊yield 1⦉@0; - return @1⦊"foo" - }⦉@1
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html deleted file mode 100644 index 2387f40847ad4..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main-{closure#1}.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - -yield.main-{closure#1} - Coverage Spans - - - -
|| { - @0⦊yield 1⦉@0; - @1⦊yield 2⦉@1; - @2⦊yield 3⦉@2; - return @3⦊"foo" - }⦉@3
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html deleted file mode 100644 index 7c974d7f97bc4..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.yield/yield.main.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - -yield.main - Coverage Spans - - - -
fn main() { - let @0,1,2⦊mut generator⦉@0,1,2 = || { - yield 1; - return "foo" - }; - - match @0,1,2⦊Pin::new(&mut generator).resume(()) { - GeneratorState::Yielded(1)⦉@0,1,2 => @4,6,7,8⦊{}⦉@4,6,7,8 - _ => @5⦊panic!("unexpected value from resume")⦉@5, - } - match @4,6,7,8⦊Pin::new(&mut generator).resume(())⦉@4,6,7,8 { - GeneratorState::Complete(@10,11⦊"foo"⦉@10,11) => @12,13,14,15⦊{}⦉@12,13,14,15 - _ => @9⦊panic!("unexpected value from resume")⦉@9, - } - - let @12,13,14,15⦊mut generator⦉@12,13,14,15 = || { - yield 1; - yield 2; - yield 3; - return "foo" - }; - - match @12,13,14,15⦊Pin::new(&mut generator).resume(()) { - GeneratorState::Yielded(1)⦉@12,13,14,15 => @17,19,20,21⦊{}⦉@17,19,20,21 - _ => @18⦊panic!("unexpected value from resume")⦉@18, - } - match @17,19,20,21⦊Pin::new(&mut generator).resume(()) { - GeneratorState::Yielded(2)⦉@17,19,20,21 => @23,25⦊{}⦉@23,25 - _ => @24⦊panic!("unexpected value from resume")⦉@24, - } -}@23,25⦊⦉@23,25
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview/Makefile b/src/test/run-make-fulldeps/coverage-spanview/Makefile index 979c6a3da411e..f414fe89eb945 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/Makefile +++ b/src/test/run-make-fulldeps/coverage-spanview/Makefile @@ -1,9 +1,5 @@ # needs-profiler-support -# ISSUE(76038): When targeting MSVC, Rust binaries built with both `-Z instrument-coverage` and -# `-C link-dead-code` typically crash (with a seg-fault) or at best generate an empty `*.profraw`. -# See ../coverage/coverage_tools.mk for more information. - -include ../coverage/coverage_tools.mk BASEDIR=../coverage-spanview @@ -47,7 +43,6 @@ endif echo "--edition=2018" \ ) \ -Zinstrument-coverage \ - -Clink-dead-code=$(LINK_DEAD_CODE) \ -Zdump-mir=InstrumentCoverage \ -Zdump-mir-spanview \ -Zdump-mir-dir="$(TMPDIR)"/mir_dump.$@ diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html index 63f7d2dd2d9ff..9834124694ec7 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.abort/abort.main.-------.InstrumentCoverage.0.html @@ -69,31 +69,41 @@ -
fn main() -> Result<(),u8> { - let @0⦊mut countdown = 10⦉@0; +
@0⦊fn main() -> Result<(), u8> { + let mut countdown = 10⦉@0; while @1,2⦊countdown > 0⦉@1,2 { if @3,5⦊countdown < 5⦉@3,5 @6,8,9⦊{ - might_abort(false); - }⦉@6,8,9@7⦊⦉@7 - @10,11⦊countdown -= 1⦉@10,11; +17:12-17:25: @5[6]: FakeRead(ForMatchedPlace, _7)">@3,5⦊countdown < 5⦉@3,5 @6,8,9⦊{ + might_abort(false); + }⦉@6,8,9@7⦊⦉@7 + // See discussion (below the `Notes` section) on coverage results for the closing brace. + if @10⦊countdown < 5⦉@10 @11,13,14⦊{ might_abort(false); }⦉@11,13,14@12⦊⦉@12 // Counts for different regions on one line. + // For the following example, the closing brace is the last character on the line. + // This shows the character after the closing brace is highlighted, even if that next + // character is a newline. + if @15⦊countdown < 5⦉@15 @16,18,19⦊{ might_abort(false); }⦉@16,18,19@17⦊⦉@17 + @20,21⦊countdown -= 1⦉@20,21; } - @4⦊Ok(()) -}⦉@4
+ @4⦊Ok(()) +}⦉@4
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html index 444ca72ce4c10..ab7108ae570b7 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.abort/abort.might_abort.-------.InstrumentCoverage.0.html @@ -69,7 +69,7 @@ -
fn might_abort(should_abort: bool) { +
@0⦊fn might_abort(should_abort: bool) ⦉@0{ if @0⦊should_abort⦉@0 { fn main() -> Result<(),u8> { - let @0⦊mut countdown = 10⦉@0; +
@0⦊fn main() -> Result<(),u8> { + let mut countdown = 10⦉@0; while @1,2⦊countdown > 0⦉@1,2 { @@ -89,14 +90,14 @@ might_fail_assert(2); }⦉@10,12,13@11⦊⦉@11@14⦊⦉@14 - }⦉@10,12,13@11⦊⦉@11 + @15,16⦊countdown -= 1⦉@15,16; } - @4⦊Ok(()) -}⦉@4
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html index c03fc8e416e5e..13cfebfe6e50e 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.assert/assert.might_fail_assert.-------.InstrumentCoverage.0.html @@ -69,9 +69,9 @@ -
fn might_fail_assert(one_plus_one: u32) { - @0,1,2,3,4⦊fn might_fail_assert(one_plus_one: u32) ⦉@0,1,2,3,4{ + @0,1,2,3,4⦊println!("does 1 + 1 = {}?", one_plus_one);⦉@0,1,2,3,4 - assert_eq!(@0,1,2,3,4⦊1 + 1⦉@0,1,2,3,4, one_plus_one, @5,7,8,9,10,11,12⦊"the argument was wrong"⦉@5,7,8,9,10,11,12); + assert_eq!(@0,1,2,3,4⦊1 + 1⦉@0,1,2,3,4, one_plus_one, @5,7,8,9,10,11,12⦊"the argument was wrong"⦉@5,7,8,9,10,11,12); }@6⦊⦉@6
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.call.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.c-{closure#0}.-------.InstrumentCoverage.0.html similarity index 65% rename from src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.call.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.c-{closure#0}.-------.InstrumentCoverage.0.html index eeee81daeb21c..82a22ccb4e673 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.call.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.c-{closure#0}.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -try_error_result.call - Coverage Spans +async.c-{closure#0} - Coverage Spans -
fn call(return_error: bool) -> Result<(),()> { - if @0⦊return_error⦉@0 { - @1,3⦊Err(())⦉@1,3 +
@0⦊{ + if x == 8⦉@0 { + @1,3⦊1⦉@1,3 } else { - @2⦊Ok(())⦉@2 + @2⦊0⦉@2 } -}@4⦊⦉@4
+}@4⦊⦉@4
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.c.-------.InstrumentCoverage.0.html similarity index 77% rename from src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.c.-------.InstrumentCoverage.0.html index 0b193f4973e09..3eee0dd4100ed 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.c.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -async.i - Coverage Spans +async.c - Coverage Spans -
async fn i(x: u8) { - match x { - y if f().await == y + 1 => (), - _ => (), +
@0,1⦊async fn c(x: u8) -> u8 ⦉@0,1{ + if x == 8 { + 1 + } else { + 0 } -}@0,1⦊⦉@0,1
+}
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.d-{closure#0}.-------.InstrumentCoverage.0.html similarity index 79% rename from src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.d-{closure#0}.-------.InstrumentCoverage.0.html index 7fe94dca7a412..7cf34f077954f 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.d-{closure#0}.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -async.f-{closure#0} - Coverage Spans +async.d-{closure#0} - Coverage Spans -
{ @0⦊1 }⦉@0
+
@0⦊⦉@0{ 1 }
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.d.-------.InstrumentCoverage.0.html similarity index 81% rename from src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.d.-------.InstrumentCoverage.0.html index f5eddba9d4b5a..5c7f6e00224a0 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.d.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -async.f - Coverage Spans +async.d - Coverage Spans -
async fn f() -> u8 { 1 }@0,1⦊⦉@0,1
+
@0,1⦊async fn d() -> u8 ⦉@0,1{ 1 }
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#4}-assert_receiver_is_total_eq.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.e-{closure#0}.-------.InstrumentCoverage.0.html similarity index 78% rename from src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#4}-assert_receiver_is_total_eq.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.e-{closure#0}.-------.InstrumentCoverage.0.html index b4beef867ebcc..1f95a7d35af88 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#4}-assert_receiver_is_total_eq.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.e-{closure#0}.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -partial_eq.{impl#4}-assert_receiver_is_total_eq - Coverage Spans +async.e-{closure#0} - Coverage Spans -
@0⦊Eq⦉@0
+
@0⦊⦉@0{ 1 }
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.e.-------.InstrumentCoverage.0.html similarity index 80% rename from src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.e.-------.InstrumentCoverage.0.html index dea4560ea56a7..ee3b7b1d7ffc7 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.e.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -async.foo - Coverage Spans +async.e - Coverage Spans -
async fn foo() -> [bool; 10] { [false; 10] }@0,1⦊⦉@0,1
+
@0,1⦊async fn e() -> u8 ⦉@0,1{ 1 }
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html index 4689c34ca0fba..8f61257ca1bac 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#0}.-------.InstrumentCoverage.0.html @@ -69,21 +69,16 @@ -
{ - @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 - }
+
@0,1,2,3⦊⦉@0,1,2,3$crate::panicking::panic_fmt($crate::format_args!($fmt, $($arg)+))
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html index ccfb1dd0a37c3..923c669e72d11 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#1}.-------.InstrumentCoverage.0.html @@ -69,21 +69,16 @@ -
{ - @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 - }
+
@0,1,2,3⦊⦉@0,1,2,3$crate::panicking::panic_fmt($crate::format_args!($fmt, $($arg)+))
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html index 2d402b83081c3..59f62959998ce 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#2}.-------.InstrumentCoverage.0.html @@ -69,21 +69,16 @@ -
{ - @0,1,2,3⦊$crate::rt::begin_panic_fmt(&$crate::format_args!($fmt, $($arg)+))⦉@0,1,2,3 - }
+
@0,1,2,3⦊⦉@0,1,2,3$crate::panicking::panic_fmt($crate::format_args!($fmt, $($arg)+))
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html index adba2d9965dbe..996c537225d95 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html @@ -69,7 +69,7 @@ -
|_| @0⦊()⦉@0
+
|_| @0⦊()⦉@0
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html index 583a67e6c7fb7..0c597d40de04f 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html @@ -69,158 +69,171 @@ -
pub fn block_on<F: Future>(mut future: F) -> F::Output { - let @0,1,2,3,4,5⦊mut future = unsafe { Pin::new_unchecked(&mut future) }; - - static VTABLE: RawWakerVTable = RawWakerVTable::new( - |_| unimplemented!("clone"), - |_| unimplemented!("wake"), - |_| unimplemented!("wake_by_ref"), - |_| (), - ); - let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; - let mut context = Context::from_waker(&waker)⦉@0,1,2,3,4,5; +
@0,1,2,3,4,5⦊pub fn block_on<F: Future>(mut future: F) -> F::Output { + let mut future = unsafe { Pin::new_unchecked(&mut future) }; + + static VTABLE: RawWakerVTable = RawWakerVTable::new( + |_| unimplemented!("clone"), + |_| unimplemented!("wake"), + |_| unimplemented!("wake_by_ref"), + |_| (), + ); + let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; + let mut context = Context::from_waker(&waker)⦉@0,1,2,3,4,5; loop { - if let Poll::Ready(@10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17) = @6,7,8,9⦊future.as_mut().poll(&mut context)⦉@6,7,8,9 { - break @10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17; - } - }@11,13⦊⦉@11,13 - }@10,12,14,15,16,17⦊⦉@10,12,14,15,16,17
+ if let Poll::Ready(@10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17) = @6,7,8,9⦊future.as_mut().poll(&mut context)⦉@6,7,8,9 { + break @10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17; + }@11,13⦊⦉@11,13 + } + }@10,12,14,15,16,17⦊⦉@10,12,14,15,16,17
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html index 7fe94dca7a412..74b62673ac94b 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.f-{closure#0}.-------.InstrumentCoverage.0.html @@ -69,7 +69,7 @@ -
{ @0⦊1 }⦉@0
+
@0⦊⦉@0{ 1 }
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html index f5eddba9d4b5a..a31bca54df2e5 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.f.-------.InstrumentCoverage.0.html @@ -69,6 +69,6 @@ -
async fn f() -> u8 { 1 }@0,1⦊⦉@0,1
+
@0,1⦊async fn f() -> u8 ⦉@0,1{ 1 }
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html index d3b9609a7f34d..b8c53cccabda1 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.foo-{closure#0}.-------.InstrumentCoverage.0.html @@ -69,7 +69,7 @@ -
{ @0⦊[false; 10] }⦉@0
+
@0⦊⦉@0{ [false; 10] }
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html index dea4560ea56a7..cf72a9d532c79 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.foo.-------.InstrumentCoverage.0.html @@ -69,6 +69,6 @@ -
async fn foo() -> [bool; 10] { [false; 10] }@0,1⦊⦉@0,1
+
@0,1⦊async fn foo() -> [bool; 10] ⦉@0,1{ [false; 10] }
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html index 9967a387a05db..b10012621b7dd 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.g-{closure#0}.-------.InstrumentCoverage.0.html @@ -69,12 +69,14 @@ -
@0,2,3⦊{ - match x⦉@0,2,3 { - @16⦊y⦉@16 if @0,2,3⦊f()⦉@0,2,3.await == @9,12,14,15⦊y⦉@9,12,14,15@17⦊⦉@17 => @16⦊()⦉@16, - _ => @1⦊()⦉@1, +
@0,3,4⦊{ + match x⦉@0,3,4 { + @17⦊y⦉@17 if @0,3,4⦊e()⦉@0,3,4.await == @10,13,15,16⦊y⦉@10,13,15,16 => @17⦊()⦉@17, + @33⦊y⦉@33 if @1,19,20⦊f()⦉@1,19,20.await == @26,29,31,32⦊y⦉@26,29,31,32 => @33⦊()⦉@33, + _ => @2⦊()⦉@2, } -}@18,19⦊⦉@18,19
+}@35,36⦊⦉@35,36
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html index 5a43e8162cba8..973995477b9aa 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html @@ -69,11 +69,12 @@ -
pub async fn g(x: u8) { +
@0,1⦊pub async fn g(x: u8) ⦉@0,1{ match x { + y if e().await == y => (), y if f().await == y => (), _ => (), } -}@0,1⦊⦉@0,1
+}
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html index 986a4b198cbe0..6b4b43f836580 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.h-{closure#0}.-------.InstrumentCoverage.0.html @@ -69,12 +69,14 @@ -
@0,2,3⦊{ - match x⦉@0,2,3 { - @17⦊y⦉@17 if @0,2,3⦊foo()⦉@0,2,3.await[@9,12,14,15,16⦊y⦉@9,12,14,15,16]@18⦊⦉@18 => @17⦊()⦉@17, - _ => @1⦊()⦉@1, +
@0,2,3⦊{ // The function signature is counted when called, but the body is not + // executed (not awaited) so the open brace has a `0` count (at least when + // displayed with `llvm-cov show` in color-mode). + match x⦉@0,2,3 { + @17⦊y⦉@17 if @0,2,3⦊foo()⦉@0,2,3.await[@9,12,14,15,16⦊y⦉@9,12,14,15,16] => @17⦊()⦉@17, + _ => @1⦊()⦉@1, } -}@19,20⦊⦉@19,20
+}@19,20⦊⦉@19,20
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html index aead25eed6436..f2ea01281fe1e 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html @@ -69,11 +69,13 @@ -
async fn h(x: usize) { +
@0,1⦊async fn h(x: usize) ⦉@0,1{ // The function signature is counted when called, but the body is not + // executed (not awaited) so the open brace has a `0` count (at least when + // displayed with `llvm-cov show` in color-mode). match x { y if foo().await[y] => (), _ => (), } -}@0,1⦊⦉@0,1
+}
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html index ab9bbf85dd7a1..49297870fa0a7 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.i-{closure#0}.-------.InstrumentCoverage.0.html @@ -69,14 +69,23 @@ -
@0,2,3⦊{ - match x⦉@0,2,3 { - @17⦊y⦉@17 if @0,2,3⦊f()⦉@0,2,3.await == @9,12,14,15,16⦊y + 1⦉@9,12,14,15,16@18⦊⦉@18 => @17⦊()⦉@17, - _ => @1⦊()⦉@1, +
@0,3,4⦊{ // line coverage is 1, but there are 2 regions: + // (a) the function signature, counted when the function is called; and + // (b) the open brace for the function body, counted once when the body is + // executed asynchronously. + match x⦉@0,3,4 { + @18,20⦊y⦉@18,20 if @0,3,4⦊c(x)⦉@0,3,4.await == @10,13,15,16,17⦊y + 1⦉@10,13,15,16,17 => { @18,20⦊d()⦉@18,20.await; } + @48⦊y⦉@48 if @1,33,34⦊f()⦉@1,33,34.await == @40,43,45,46,47⦊y + 1⦉@40,43,45,46,47 => @48⦊()⦉@48, + _ => @2⦊()⦉@2, } -}@19,20⦊⦉@19,20
+}@50,51⦊⦉@50,51
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html index 0b193f4973e09..e5dc6ecd4eb63 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.i.-------.InstrumentCoverage.0.html @@ -69,11 +69,15 @@ -
async fn i(x: u8) { +
@0,1⦊async fn i(x: u8) ⦉@0,1{ // line coverage is 1, but there are 2 regions: + // (a) the function signature, counted when the function is called; and + // (b) the open brace for the function body, counted once when the body is + // executed asynchronously. match x { + y if c(x).await == y + 1 => { d().await; } y if f().await == y + 1 => (), _ => (), } -}@0,1⦊⦉@0,1
+}
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j-c.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j-c.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..a8e2d7e2f396e --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j-c.-------.InstrumentCoverage.0.html @@ -0,0 +1,92 @@ + + + + +async.j-c - Coverage Spans + + + +
@0⦊fn c(x: u8) -> u8 { + if x == 8⦉@0 { + @1,3⦊1⦉@1,3 // This line appears covered, but the 1-character expression span covering the `1` + // is not executed. (`llvm-cov show` displays a `^0` below the `1` ). This is because + // `fn j()` executes the open brace for the funciton body, followed by the function's + // first executable statement, `match x`. Inner function declarations are not + // "visible" to the MIR for `j()`, so the code region counts all lines between the + // open brace and the first statement as executed, which is, in a sense, true. + // `llvm-cov show` overcomes this kind of situation by showing the actual counts + // of the enclosed coverages, (that is, the `1` expression was not executed, and + // accurately displays a `0`). + } else { + @2⦊0⦉@2 + } + }@4⦊⦉@4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j-d.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j-d.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..4eed8ee60dd64 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j-d.-------.InstrumentCoverage.0.html @@ -0,0 +1,75 @@ + + + + +async.j-d - Coverage Spans + + + +
@0⦊fn d() -> u8 { 1 }⦉@0
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j-f.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j-f.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..6e80c8c786ecb --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j-f.-------.InstrumentCoverage.0.html @@ -0,0 +1,75 @@ + + + + +async.j-f - Coverage Spans + + + +
@0⦊fn f() -> u8 { 1 }⦉@0
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..7cc751074a077 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.j.-------.InstrumentCoverage.0.html @@ -0,0 +1,108 @@ + + + + +async.j - Coverage Spans + + + +
@0,3,4,5⦊fn j(x: u8) { + // non-async versions of `c()`, `d()`, and `f()` to make it similar to async `i()`. + fn c(x: u8) -> u8 { + if x == 8 { + 1 // This line appears covered, but the 1-character expression span covering the `1` + // is not executed. (`llvm-cov show` displays a `^0` below the `1` ). This is because + // `fn j()` executes the open brace for the funciton body, followed by the function's + // first executable statement, `match x`. Inner function declarations are not + // "visible" to the MIR for `j()`, so the code region counts all lines between the + // open brace and the first statement as executed, which is, in a sense, true. + // `llvm-cov show` overcomes this kind of situation by showing the actual counts + // of the enclosed coverages, (that is, the `1` expression was not executed, and + // accurately displays a `0`). + } else { + 0 + } + } + fn d() -> u8 { 1 } + fn f() -> u8 { 1 } + match x⦉@0,3,4,5 { + @6,8⦊y⦉@6,8 if @0,3,4,5⦊c(x) == y + 1⦉@0,3,4,5 => @6,8⦊{ d(); }⦉@6,8 + @12⦊y⦉@12 if @1,9,10,11⦊f() == y + 1⦉@1,9,10,11 => @12⦊()⦉@12, + _ => @2⦊()⦉@2, + } +}@14⦊⦉@14
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.k.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.k.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..5792521bb2c57 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.k.-------.InstrumentCoverage.0.html @@ -0,0 +1,80 @@ + + + + +async.k - Coverage Spans + + + +
@0⦊fn k(x: u8) { // unused function + match x⦉@0 { + 1 => @1,4⦊()⦉@1,4, + 2 => @2,5⦊()⦉@2,5, + _ => @3⦊()⦉@3, + } +}@6⦊⦉@6
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.l.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.l.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..cd92b88c24cbb --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.l.-------.InstrumentCoverage.0.html @@ -0,0 +1,80 @@ + + + + +async.l - Coverage Spans + + + +
@0⦊fn l(x: u8) { + match x⦉@0 { + 1 => @1,4⦊()⦉@1,4, + 2 => @2,5⦊()⦉@2,5, + _ => @3⦊()⦉@3, + } +}@6⦊⦉@6
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html index 007da5c0ec109..2b0eb4f43c786 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html @@ -69,65 +69,101 @@ -
fn main() @0,1,2,3,4,5,6,7,8,9⦊{ - let _ = g(10); - let _ = h(9); - let mut future = Box::pin(i(8)); - executor::block_on(future.as_mut()); -}⦉@0,1,2,3,4,5,6,7,8,9
+
@0,1,2,3,4,5,6,7,8,9,10,11⦊fn main() { + let _ = g(10); + let _ = h(9); + let mut future = Box::pin(i(8)); + j(7); + l(6); + executor::block_on(future.as_mut()); +}⦉@0,1,2,3,4,5,6,7,8,9,10,11
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#0}.-------.InstrumentCoverage.0.html index b68c0a1cabe35..523e839a918dd 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#0}.-------.InstrumentCoverage.0.html @@ -70,19 +70,23 @@
|| - { - let @0⦊mut countdown = 0⦉@0; - if @0⦊is_false⦉@0 @1,3⦊{ + @0⦊{ + let mut countdown = 0; + if is_false⦉@0 @1,3⦊{ countdown = 10; +36:21-38:10: @3[1]: _3 = const ()"> countdown = 10; }⦉@1,3@2⦊⦉@2 +36:21-38:10: @3[1]: _3 = const ()"> }⦉@1,3@2⦊⦉@2 -closure.main-{closure#2} - Coverage Spans +closure.main-{closure#10} - Coverage Spans -
|| - { - let @0⦊mut countdown = 0⦉@0; - if @0⦊is_false⦉@0 @1,3⦊{ - countdown = 10; - }⦉@1,3@2⦊⦉@2 - @4,5⦊"alt string 1".to_owned() - }⦉@4,5
+
|val| + @0⦊{ + let mut countdown = 0; + if is_false⦉@0 @1,3⦊{ + countdown = 10; + }⦉@1,3@2⦊⦉@2 + @4,5,6,7,8⦊format!("'{}'", val) + }⦉@4,5,6,7,8
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#3}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#3}.-------.InstrumentCoverage.0.html index 140e33905fb14..032a6a7e435c1 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#3}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#3}.-------.InstrumentCoverage.0.html @@ -69,27 +69,25 @@ -
|| - { - let @0⦊mut countdown = 0⦉@0; - if @0⦊is_false⦉@0 @1,3⦊{ - countdown = 10; - }⦉@1,3@2⦊⦉@2 - @4,5⦊"alt string 3".to_owned() - }⦉@4,5
+
| + mut countdown + | + @0⦊{ + if is_false⦉@0 @1,3⦊{ + countdown = 10; + }⦉@1,3@2⦊⦉@2 + @4,5⦊"closure should be unused".to_owned() + }⦉@4,5
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#4}.-------.InstrumentCoverage.0.html similarity index 72% rename from src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#4}.-------.InstrumentCoverage.0.html index adba2d9965dbe..df0172bdf7067 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#4}.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -async.executor-block_on-VTABLE-{closure#3} - Coverage Spans +closure.main-{closure#4} - Coverage Spans -
|_| @0⦊()⦉@0
+
| _unused_arg: u8 | @0,1⦊countdown += 1⦉@0,1
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#5}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#5}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..e28038fd3fec6 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#5}.-------.InstrumentCoverage.0.html @@ -0,0 +1,115 @@ + + + + +closure.main-{closure#5} - Coverage Spans + + + +
@0,1,2⦊{ + $crate::io::_print($crate::format_args_nl!($($arg)*)); + }⦉@0,1,2
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#8}-clone.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#6}.-------.InstrumentCoverage.0.html similarity index 60% rename from src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#8}-clone.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#6}.-------.InstrumentCoverage.0.html index 27a2ab71827a0..d479211aa37e5 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq/partial_eq.{impl#8}-clone.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#6}.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -partial_eq.{impl#8}-clone - Coverage Spans +closure.main-{closure#6} - Coverage Spans -
@0,1,2,3⦊Clone⦉@0,1,2,3
+
| _unused_arg: u8 | @0,1,2⦊{ println!("not called") }⦉@0,1,2
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#7}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#7}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..2734c0b24688c --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#7}.-------.InstrumentCoverage.0.html @@ -0,0 +1,115 @@ + + + + +closure.main-{closure#7} - Coverage Spans + + + +
| _unused_arg: u8 | @0,1,2⦊{ + println!("not called") + }⦉@0,1,2
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#8}.-------.InstrumentCoverage.0.html similarity index 58% rename from src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#8}.-------.InstrumentCoverage.0.html index 5a43e8162cba8..a032df54ea21c 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.g.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#8}.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -async.g - Coverage Spans +closure.main-{closure#8} - Coverage Spans -
pub async fn g(x: u8) { - match x { - y if f().await == y => (), - _ => (), - } -}@0,1⦊⦉@0,1
+
| + _unused_arg: u8 + | @0,1,2⦊{ println!("not called") }⦉@0,1,2
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#9}.-------.InstrumentCoverage.0.html similarity index 58% rename from src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#9}.-------.InstrumentCoverage.0.html index aead25eed6436..3c174e03ebe35 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.async/async.h.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main-{closure#9}.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -async.h - Coverage Spans +closure.main-{closure#9} - Coverage Spans -
async fn h(x: usize) { - match x { - y if foo().await[y] => (), - _ => (), - } -}@0,1⦊⦉@0,1
+
| + _unused_arg: u8 + | @0,1,2⦊{ println!("not called") }⦉@0,1,2
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main.-------.InstrumentCoverage.0.html index 2d41918efb2ec..702c7937064b7 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.closure/closure.main.-------.InstrumentCoverage.0.html @@ -69,4447 +69,10853 @@ -
fn main() @0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34⦊{ -@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊fn main() { + // Initialize test constants in a way that cannot be determined at compile time, to ensure - // Initialize test constants in a way that cannot be determined at compile time, to ensure + // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. - // dependent conditions. + let is_true = std::env::args().len() == 1; - let is_true = std::env::args().len() == 1; + let is_false = ! is_true; - let is_false = ! is_true; + - + let mut some_string = Some(String::from("the string content")); - let mut some_string = Some(String::from("the string content")); + println!( - println!( + "The string or alt: {}" - "The string or alt: {}" + , - , + some_string - some_string + . - . + unwrap_or_else - unwrap_or_else + ( - ( + ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34|| +3:11-155:2: @41[38]: _0 = const ()"> ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42|| { let mut countdown = 0; if is_false { countdown = 10; } "alt string 1".to_owned() - } }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34⦊ -@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊ + ) - ) + ); - ); + - + some_string = Some(String::from("the string content")); - some_string = Some(String::from("the string content")); + let - let + a - a + = - = + ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34|| +3:11-155:2: @41[38]: _0 = const ()"> ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42|| { let mut countdown = 0; if is_false { countdown = 10; } "alt string 2".to_owned() - } }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34⦊; -@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊; + println!( - println!( + "The string or alt: {}" - "The string or alt: {}" + , - , + some_string - some_string + . - . + unwrap_or_else - unwrap_or_else + ( - ( + a - a + ) - ) + ); - ); + - + some_string = None; - some_string = None; + println!( - println!( + "The string or alt: {}" - "The string or alt: {}" + , - , + some_string - some_string + . - . + unwrap_or_else - unwrap_or_else + ( - ( + ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34|| +3:11-155:2: @41[38]: _0 = const ()"> ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42|| { let mut countdown = 0; if is_false { countdown = 10; } "alt string 3".to_owned() - } }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34⦊ -@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊ + ) - ) + ); - ); + - + some_string = None; - some_string = None; + let - let + a - a + = - = + ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34|| +3:11-155:2: @41[38]: _0 = const ()"> ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42|| { let mut countdown = 0; if is_false { countdown = 10; } "alt string 4".to_owned() - } }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34⦊; -@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊; + println!( - println!( + "The string or alt: {}" - "The string or alt: {}" + , - , + some_string - some_string + . - . + unwrap_or_else - unwrap_or_else + ( - ( + a - a + ) - ) + ); - ); +}⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34
+97:9-104:6: @33[10]: _100 = &_5 +95:9-95:22: @33[13]: FakeRead(ForLet, _99) +3:11-155:2: @41[38]: _0 = const ()">
+ let + quote_closure + = + ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42|val|
+ { + let mut countdown = 0; + if is_false { + countdown = 10; + } + format!("'{}'", val) + }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊; + println!( + "Repeated, quoted string: {:?}" + , + std::iter::repeat("repeat me") + .take(5) + .map + ( + quote_closure + ) + .collect::<Vec<_>>() + ); + + let + _unused_closure + = + ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42| + mut countdown + | + { + if is_false { + countdown = 10; + } + "closure should be unused".to_owned() + }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊; + + let mut countdown = 10; + let _short_unused_closure = ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42| _unused_arg: u8 | countdown += 1@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊; + + // Macros can sometimes confuse the coverage results. Compare this next assignment, with an + // unused closure that invokes the `println!()` macro, with the closure assignment above, that + // does not use a macro. The closure above correctly shows `0` executions. + let _short_unused_closure = ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42| _unused_arg: u8 | println!("not called")@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊; + // The closure assignment above is executed, with a line count of `1`, but the `println!()` + // could not have been called, and yet, there is no indication that it wasn't... + + // ...but adding block braces gives the expected result, showing the block was not executed. + let _short_unused_closure_block = ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42| _unused_arg: u8 | { println!("not called") }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊; + + let _shortish_unused_closure = ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42| _unused_arg: u8 | { + println!("not called") + }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊; + + let _as_short_unused_closure = ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42| + _unused_arg: u8 + | { println!("not called") }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊; + + let _almost_as_short_unused_closure = ⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42| + _unused_arg: u8 + | { println!("not called") }@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42⦊ + ; +}⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html index e6f95385910dc..e16b366e2162e 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.conditions/conditions.main.-------.InstrumentCoverage.0.html @@ -69,19 +69,20 @@ -
fn main() { +
@0⦊fn main() ⦉@0{ let @0⦊mut countdown = 0⦉@0; - if @0⦊true⦉@0 @1,3⦊{ +4:9-4:22: @0[2]: FakeRead(ForLet, _1) +5:8-5:12: @0[5]: _3 = const true +5:8-5:12: @0[6]: FakeRead(ForMatchedPlace, _3)">@0⦊mut countdown = 0; + if true⦉@0 @1,3⦊{ countdown = 10; +5:13-7:6: @3[1]: _2 = const ()"> countdown = 10; }⦉@1,3@2⦊⦉@2 +5:13-7:6: @3[1]: _2 = const ()"> }⦉@1,3@2⦊⦉@2 const B: u32 = 100; let @25⦊x⦉@25 = if @6⦊countdown > 2⦉@6 { if @9,11⦊countdown < 1⦉@9,11 || @18⦊countdown > 5⦉@18@16⦊⦉@16@17⦊⦉@17 || @14⦊countdown != 9⦉@14@12⦊⦉@12@13⦊⦉@13 @20,22⦊{ +14:29-14:42: @18[3]: _15 = Gt(move _16, const 5_u32)">@18⦊countdown > 5⦉@18 || @14⦊countdown != 9⦉@14 @20,22⦊{ countdown = 0; +14:61-16:10: @22[1]: _10 = const ()"> countdown = 0; }⦉@20,22@21⦊⦉@21 +14:61-16:10: @22[1]: _10 = const ()"> }⦉@20,22@21⦊⦉@21 @23,24⦊countdown -= 5; @@ -119,17 +117,18 @@ }; let @25⦊mut countdown = 0⦉@25; - if @25⦊true⦉@25 @26,28⦊{ +23:9-23:22: @25[4]: FakeRead(ForLet, _21) +24:8-24:12: @25[7]: _23 = const true +24:8-24:12: @25[8]: FakeRead(ForMatchedPlace, _23)">@25⦊mut countdown = 0; + if true⦉@25 @26,28⦊{ countdown = 10; +24:13-26:6: @28[1]: _22 = const ()"> countdown = 10; }⦉@26,28@27⦊⦉@27 +24:13-26:6: @28[1]: _22 = const ()"> }⦉@26,28@27⦊⦉@27 if @31⦊countdown > 2⦉@31 { if @34,36⦊countdown < 1⦉@34,36 || @43⦊countdown > 5⦉@43@41⦊⦉@41@42⦊⦉@42 || @39⦊countdown != 9⦉@39@37⦊⦉@37@38⦊⦉@38 @45,47⦊{ +31:29-31:42: @43[3]: _35 = Gt(move _36, const 5_i32)">@43⦊countdown > 5⦉@43 || @39⦊countdown != 9⦉@39 @45,47⦊{ countdown = 0; +31:61-33:10: @47[1]: _30 = const ()"> countdown = 0; }⦉@45,47@46⦊⦉@46 +31:61-33:10: @47[1]: _30 = const ()"> }⦉@45,47@46⦊⦉@46 @48,49⦊countdown -= 5⦉@48,49; } else { @@ -164,190 +160,167 @@ if @50⦊true⦉@50 { - // Demonstrate the difference with `TerminatorKind::Assert` as of 2020-11-15. Assert is no - // longer treated as a `BasicCoverageBlock` terminator, which changed the coverage region, - // for the executed `then` block above, to include the closing brace on line 30. That - // changed the line count, but the coverage code region (for the `else if` condition) is - // still valid. - // - // Note that `if` (then) and `else` blocks include the closing brace in their coverage - // code regions when the last line in the block ends in a semicolon, because the Rust - // compiler inserts a `StatementKind::Assign` to assign `const ()` to a `Place`, for the - // empty value for the executed block. When the last line does not end in a semicolon - // (that is, when the block actually results in a value), the additional `Assign` is not - // generated, and the brace is not included. - let @51,53⦊mut countdown = 0⦉@51,53; - if @51,53⦊true⦉@51,53 @54,56⦊{ - countdown = 10; - }⦉@54,56@55⦊⦉@55 + let @51,53⦊mut countdown = 0; + if true⦉@51,53 @54,56⦊{ + countdown = 10; + }⦉@54,56@55⦊⦉@55 - if @57⦊countdown > 7⦉@57 @58,60,61⦊{ - countdown -= 4; - }⦉@58,60,61 - // The closing brace of the `then` branch is now included in the coverage region, and shown - // as "executed" (giving its line a count of 1 here). Since, in the original version above, - // the closing brace shares the same line as the `else if` conditional expression (which is - // not executed if the first `then` condition is true), only the condition's code region is - // marked with a count of 0 now. - else if @59⦊countdown > 2⦉@59 { - if @62,64⦊countdown < 1⦉@62,64 || @71⦊countdown > 5⦉@71@69⦊⦉@69@70⦊⦉@70 || @67⦊countdown != 9⦉@67@65⦊⦉@65@66⦊⦉@66 @73,75⦊{ - countdown = 0; - }⦉@73,75@74⦊⦉@74 - @76,77⦊countdown -= 5⦉@76,77; + if @57⦊countdown > 7⦉@57 @58,60,61⦊{ + countdown -= 4; + }⦉@58,60,61 + else if @59⦊countdown > 2⦉@59 { + if @62,64⦊countdown < 1⦉@62,64 || @71⦊countdown > 5⦉@71 || @67⦊countdown != 9⦉@67 @73,75⦊{ + countdown = 0; + }⦉@73,75@74⦊⦉@74 + @76,77⦊countdown -= 5⦉@76,77; } else { - @63⦊return⦉@63; + @63⦊return⦉@63; } - }@78⦊⦉@78@52⦊⦉@52 + }@52⦊⦉@52 // Note: closing brace shows uncovered (vs. `0` for implicit else) because condition literal + // `true` was const-evaluated. The compiler knows the `if` block will be executed. - let @79⦊mut countdown = 0⦉@79; - if @79⦊true⦉@79 @80,82⦊{ - countdown = 1; - }⦉@80,82@81⦊⦉@81 + let @79⦊mut countdown = 0; + if true⦉@79 @80,82⦊{ + countdown = 1; + }⦉@80,82@81⦊⦉@81 - let @106⦊z⦉@106 = if @83⦊countdown > 7⦉@83 @84,86,87⦊{ - countdown -= 4; - }⦉@84,86,87 else if @85⦊countdown > 2⦉@85 { - if @88,90⦊countdown < 1⦉@88,90 || @97⦊countdown > 5⦉@97@95⦊⦉@95@96⦊⦉@96 || @93⦊countdown != 9⦉@93@91⦊⦉@91@92⦊⦉@92 @99,101⦊{ - countdown = 0; - }⦉@99,101@100⦊⦉@100 - @102,103⦊countdown -= 5⦉@102,103; + let @106⦊z⦉@106 = if @83⦊countdown > 7⦉@83 @84,86,87⦊{ + countdown -= 4; + }⦉@84,86,87 else if @85⦊countdown > 2⦉@85 { + if @88,90⦊countdown < 1⦉@88,90 || @97⦊countdown > 5⦉@97 || @93⦊countdown != 9⦉@93 @99,101⦊{ + countdown = 0; + }⦉@99,101@100⦊⦉@100 + @102,103⦊countdown -= 5⦉@102,103; } else { - let @89,104,105⦊should_be_reachable = countdown; - println!("reached"); - return⦉@89,104,105; + let @89,104,105⦊should_be_reachable = countdown; + println!("reached"); + return⦉@89,104,105; }; - let @127⦊w⦉@127 = if @106⦊countdown > 7⦉@106 @107,109,110⦊{ - countdown -= 4; - }⦉@107,109,110 else if @108⦊countdown > 2⦉@108 { - if @111,113⦊countdown < 1⦉@111,113 || @120⦊countdown > 5⦉@120@118⦊⦉@118@119⦊⦉@119 || @116⦊countdown != 9⦉@116@114⦊⦉@114@115⦊⦉@115 @122,124⦊{ - countdown = 0; - }⦉@122,124@123⦊⦉@123 - @125,126⦊countdown -= 5⦉@125,126; + let @127⦊w⦉@127 = if @106⦊countdown > 7⦉@106 @107,109,110⦊{ + countdown -= 4; + }⦉@107,109,110 else if @108⦊countdown > 2⦉@108 { + if @111,113⦊countdown < 1⦉@111,113 || @120⦊countdown > 5⦉@120 || @116⦊countdown != 9⦉@116 @122,124⦊{ + countdown = 0; + }⦉@122,124@123⦊⦉@123 + @125,126⦊countdown -= 5⦉@125,126; } else { - @112⦊return⦉@112; + @112⦊return⦉@112; }; -}@130⦊⦉@130@131⦊⦉@131
+}@131⦊⦉@131
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.dead_code/dead_code.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.dead_code/dead_code.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..59d00600738f0 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.dead_code/dead_code.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,151 @@ + + + + +dead_code.main - Coverage Spans + + + +
@0,1,2,3⦊fn main() { + // Initialize test constants in a way that cannot be determined at compile time, to ensure + // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; + + let mut countdown = 0; + if is_true⦉@0,1,2,3 @4,6⦊{ + countdown = 10; + }⦉@4,6@5⦊⦉@5 +}@7⦊⦉@7
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.dead_code/dead_code.unused_fn.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.dead_code/dead_code.unused_fn.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..1a535b937887b --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.dead_code/dead_code.unused_fn.-------.InstrumentCoverage.0.html @@ -0,0 +1,151 @@ + + + + +dead_code.unused_fn - Coverage Spans + + + +
@0,1,2,3⦊fn unused_fn() { + // Initialize test constants in a way that cannot be determined at compile time, to ensure + // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; + + let mut countdown = 0; + if is_true⦉@0,1,2,3 @4,6⦊{ + countdown = 10; + }⦉@4,6@5⦊⦉@5 +}@7⦊⦉@7
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.dead_code/dead_code.unused_pub_fn_not_in_library.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.dead_code/dead_code.unused_pub_fn_not_in_library.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..6eff51ad89c73 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.dead_code/dead_code.unused_pub_fn_not_in_library.-------.InstrumentCoverage.0.html @@ -0,0 +1,151 @@ + + + + +dead_code.unused_pub_fn_not_in_library - Coverage Spans + + + +
@0,1,2,3⦊pub fn unused_pub_fn_not_in_library() { + // Initialize test constants in a way that cannot be determined at compile time, to ensure + // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; + + let mut countdown = 0; + if is_true⦉@0,1,2,3 @4,6⦊{ + countdown = 10; + }⦉@4,6@5⦊⦉@5 +}@7⦊⦉@7
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.drop_trait/drop_trait.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.drop_trait/drop_trait.main.-------.InstrumentCoverage.0.html index 8d6f936aadcbc..fa3c4b3c31257 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.drop_trait/drop_trait.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.drop_trait/drop_trait.main.-------.InstrumentCoverage.0.html @@ -69,22 +69,42 @@ -
fn main() -> Result<(),u8> { - let @0⦊_firecracker = Firework { strength: 1 }; +17:9-17:13: @0[5]: FakeRead(ForLet, _2) +19:8-19:12: @0[8]: _4 = const true +19:8-19:12: @0[9]: FakeRead(ForMatchedPlace, _4)">@0⦊fn main() -> Result<(),u8> { +17:9-17:13: @0[5]: FakeRead(ForLet, _2) +19:8-19:12: @0[8]: _4 = const true +19:8-19:12: @0[9]: FakeRead(ForMatchedPlace, _4)"> let _firecracker = Firework { strength: 1 }; let _tnt = Firework { strength: 100 }⦉@0; - - if @0⦊true⦉@0 { +17:9-17:13: @0[5]: FakeRead(ForLet, _2) +19:8-19:12: @0[8]: _4 = const true +19:8-19:12: @0[9]: FakeRead(ForMatchedPlace, _4)"> + let _tnt = Firework { strength: 100 }; + + if true⦉@0 { return Err(1)⦉@1,3,4,5,9,10; - } - - let _ = }@2,6,7,8⦊ + +@2,6,7,8⦊Firework { strength: 1000 }; - let _ = Firework { strength: 1000 }; + - Ok(())⦉@2,6,7,8 }@11⦊⦉@11
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.drop_trait/drop_trait.{impl#0}-drop.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.drop_trait/drop_trait.{impl#0}-drop.-------.InstrumentCoverage.0.html index 60a24df9ba6b0..b5dedeec8ac7e 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.drop_trait/drop_trait.{impl#0}-drop.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.drop_trait/drop_trait.{impl#0}-drop.-------.InstrumentCoverage.0.html @@ -69,7 +69,7 @@ -
fn drop(&mut self) @0,1,2,3⦊{ +11:6-11:6: @3.Return: return">@0,1,2,3⦊fn drop(&mut self) { fn main() -> Result<(),u8> { - let @0,1,2,3⦊mut firecracker = Firework { strength: 1 }; +28:5-28:28: @2.Call: _7 = Firework::<f64>::set_strength(move _8, const 300.30000000000001f64) -> [return: bb3, unwind: bb15] +30:8-30:12: @3[4]: _10 = const true +30:8-30:12: @3[5]: FakeRead(ForMatchedPlace, _10)">@0,1,2,3⦊fn main() -> Result<(),u8> { firecracker.set_strength(2); +28:5-28:28: @2.Call: _7 = Firework::<f64>::set_strength(move _8, const 300.30000000000001f64) -> [return: bb3, unwind: bb15] +30:8-30:12: @3[4]: _10 = const true +30:8-30:12: @3[5]: FakeRead(ForMatchedPlace, _10)"> let mut firecracker = Firework { strength: 1 }; +28:5-28:28: @2.Call: _7 = Firework::<f64>::set_strength(move _8, const 300.30000000000001f64) -> [return: bb3, unwind: bb15] +30:8-30:12: @3[4]: _10 = const true +30:8-30:12: @3[5]: FakeRead(ForMatchedPlace, _10)"> firecracker.set_strength(2); let mut tnt = Firework { strength: 100.1 }; +28:5-28:28: @2.Call: _7 = Firework::<f64>::set_strength(move _8, const 300.30000000000001f64) -> [return: bb3, unwind: bb15] +30:8-30:12: @3[4]: _10 = const true +30:8-30:12: @3[5]: FakeRead(ForMatchedPlace, _10)"> tnt.set_strength(200.1); +28:5-28:28: @2.Call: _7 = Firework::<f64>::set_strength(move _8, const 300.30000000000001f64) -> [return: bb3, unwind: bb15] +30:8-30:12: @3[4]: _10 = const true +30:8-30:12: @3[5]: FakeRead(ForMatchedPlace, _10)"> let mut tnt = Firework { strength: 100.1 }; tnt.set_strength(300.3)⦉@0,1,2,3; - - if @0,1,2,3⦊true⦉@0,1,2,3 { +28:5-28:28: @2.Call: _7 = Firework::<f64>::set_strength(move _8, const 300.30000000000001f64) -> [return: bb3, unwind: bb15] +30:8-30:12: @3[4]: _10 = const true +30:8-30:12: @3[5]: FakeRead(ForMatchedPlace, _10)"> tnt.set_strength(200.1); + tnt.set_strength(300.3); + + if true⦉@0,1,2,3 { return Err(1)⦉@4,6,7,8,12,13; - } - - let _ = @5,9,10,11⦊Firework { strength: 1000 }; - - Ok(())⦉@5,9,10,11 -}@14⦊⦉@14
+ }@5,9,10,11⦊ // The remaining lines below have no coverage because `if true` (with the constant literal + // `true`) is guaranteed to execute the `then` block, which is also guaranteed to `return`. + // Thankfully, in the normal case, conditions are not guaranteed ahead of time, and as shown + // in other tests, the lines below would have coverage (which would show they had `0` + // executions, assuming the condition still evaluated to `true`). + + let _ = Firework { strength: 1000 }; + + Ok(())⦉@5,9,10,11 +}@14⦊⦉@14
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.generics/generics.{impl#0}-set_strength.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.generics/generics.{impl#0}-set_strength.-------.InstrumentCoverage.0.html index b10da561da91d..329641d47bdbc 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.generics/generics.{impl#0}-set_strength.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.generics/generics.{impl#0}-set_strength.-------.InstrumentCoverage.0.html @@ -69,10 +69,10 @@ -
fn set_strength(&mut self, new_strength: T) @0⦊{ +12:6-12:6: @0.Return: return">@0⦊fn set_strength(&mut self, new_strength: T) { fn drop(&mut self) @0,1,2,3⦊{ +19:6-19:6: @3.Return: return">@0,1,2,3⦊fn drop(&mut self) { fn main() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let - @0,1,2,3⦊is_true +15:9-16:14: @3[3]: FakeRead(ForLet, _5) +21:9-21:16: @3[5]: _6 = _1 +21:9-21:16: @3[6]: FakeRead(ForMatchedPlace, _6)">@0,1,2,3⦊fn main() { = +15:9-16:14: @3[3]: FakeRead(ForLet, _5) +21:9-21:16: @3[5]: _6 = _1 +21:9-21:16: @3[6]: FakeRead(ForMatchedPlace, _6)"> // Initialize test constants in a way that cannot be determined at compile time, to ensure std::env::args().len() +15:9-16:14: @3[3]: FakeRead(ForLet, _5) +21:9-21:16: @3[5]: _6 = _1 +21:9-21:16: @3[6]: FakeRead(ForMatchedPlace, _6)"> // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from == +15:9-16:14: @3[3]: FakeRead(ForLet, _5) +21:9-21:16: @3[5]: _6 = _1 +21:9-21:16: @3[6]: FakeRead(ForMatchedPlace, _6)"> // dependent conditions. 1 +15:9-16:14: @3[3]: FakeRead(ForLet, _5) +21:9-21:16: @3[5]: _6 = _1 +21:9-21:16: @3[6]: FakeRead(ForMatchedPlace, _6)"> let ; +15:9-16:14: @3[3]: FakeRead(ForLet, _5) +21:9-21:16: @3[5]: _6 = _1 +21:9-21:16: @3[6]: FakeRead(ForMatchedPlace, _6)"> is_true let +15:9-16:14: @3[3]: FakeRead(ForLet, _5) +21:9-21:16: @3[5]: _6 = _1 +21:9-21:16: @3[6]: FakeRead(ForMatchedPlace, _6)"> = mut +15:9-16:14: @3[3]: FakeRead(ForLet, _5) +21:9-21:16: @3[5]: _6 = _1 +21:9-21:16: @3[6]: FakeRead(ForMatchedPlace, _6)"> std::env::args().len() countdown +15:9-16:14: @3[3]: FakeRead(ForLet, _5) +21:9-21:16: @3[5]: _6 = _1 +21:9-21:16: @3[6]: FakeRead(ForMatchedPlace, _6)"> == = +15:9-16:14: @3[3]: FakeRead(ForLet, _5) +21:9-21:16: @3[5]: _6 = _1 +21:9-21:16: @3[6]: FakeRead(ForMatchedPlace, _6)"> 1 0⦉@0,1,2,3 - ; - if - @0,1,2,3⦊is_true⦉@0,1,2,3 +15:9-16:14: @3[3]: FakeRead(ForLet, _5) +21:9-21:16: @3[5]: _6 = _1 +21:9-21:16: @3[6]: FakeRead(ForMatchedPlace, _6)"> ; + let + mut + countdown + = + 0 + ; + if + is_true⦉@0,1,2,3 @4,6⦊{ +22:5-27:6: @6[1]: _0 = const ()">@4,6⦊{ countdown +22:5-27:6: @6[1]: _0 = const ()"> countdown = +22:5-27:6: @6[1]: _0 = const ()"> = 10 +22:5-27:6: @6[1]: _0 = const ()"> 10 ; +22:5-27:6: @6[1]: _0 = const ()"> ; }⦉@4,6@5⦊⦉@5 +22:5-27:6: @6[1]: _0 = const ()"> }⦉@4,6@5⦊⦉@5 }@7⦊⦉@7
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.if_else/if_else.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.if_else/if_else.main.-------.InstrumentCoverage.0.html index 586014afebaf7..5b2cce4f648fc 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.if_else/if_else.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.if_else/if_else.main.-------.InstrumentCoverage.0.html @@ -69,11 +69,7 @@ -
fn main() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let @0,1,2,3⦊is_true = std::env::args().len() == 1; +11:9-11:16: @3[7]: FakeRead(ForMatchedPlace, _7)">@0,1,2,3⦊fn main() { + // Initialize test constants in a way that cannot be determined at compile time, to ensure + // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; fn default_trait_func(&mut self) @0,1,2⦊{ +36:10-36:10: @2.Return: return">@0,1,2⦊fn default_trait_func(&mut self) { fn in_func(a: u32) { - let @0,1,2,3,4⦊b = 1; +22:6-22:6: @4.Return: return">@0,1,2,3,4⦊fn in_func(a: u32) { + let b = 1; fn trait_func(&mut self, incr: u32) @0,1,2⦊{ +43:10-43:10: @2.Return: return">@0,1,2⦊fn trait_func(&mut self, incr: u32) { fn main() { +
@0,1,2,3⦊fn main() ⦉@0,1,2,3{ // Initialize test constants in a way that cannot be determined at compile time, to ensure // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from // dependent conditions. @@ -79,31 +79,41 @@ 7:19-7:46: @2[1]: _1 = Eq(move _2, const 1_usize) 7:9-7:16: @2[3]: FakeRead(ForLet, _1) 9:25-9:26: @3[2]: _5 = const 0_u32 -9:9-9:22: @3[3]: FakeRead(ForLet, _5)">@0,1,2,3⦊is_true = std::env::args().len() == 1; +9:9-9:22: @3[3]: FakeRead(ForLet, _5) +10:8-10:15: @3[6]: _7 = _1 +10:8-10:15: @3[7]: FakeRead(ForMatchedPlace, _7)">@0,1,2,3⦊is_true = std::env::args().len() == 1; +9:9-9:22: @3[3]: FakeRead(ForLet, _5) +10:8-10:15: @3[6]: _7 = _1 +10:8-10:15: @3[7]: FakeRead(ForMatchedPlace, _7)"> let mut countdown = 0⦉@0,1,2,3; - if @0,1,2,3⦊is_true⦉@0,1,2,3 @4,6⦊{ +9:9-9:22: @3[3]: FakeRead(ForLet, _5) +10:8-10:15: @3[6]: _7 = _1 +10:8-10:15: @3[7]: FakeRead(ForMatchedPlace, _7)"> let mut countdown = 0; + if is_true⦉@0,1,2,3 @4,6⦊{ countdown = 10; +10:16-12:6: @6[1]: _6 = const ()"> countdown = 10; }⦉@4,6@5⦊⦉@5 +10:16-12:6: @6[1]: _6 = const ()"> }⦉@4,6@5⦊⦉@5 mod in_mod { const IN_MOD_CONST: u32 = 1000; @@ -142,16 +152,13 @@ if @7⦊is_true⦉@7 @8,10,11⦊{ +48:16-50:6: @11[2]: _8 = const ()">@8,10,11⦊{ in_func(countdown); +48:16-50:6: @11[2]: _8 = const ()"> in_func(countdown); }⦉@8,10,11@9⦊⦉@9 +48:16-50:6: @11[2]: _8 = const ()"> }⦉@8,10,11@9⦊⦉@9 let fn main() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let @0,1,2,3⦊is_true = std::env::args().len() == 1; +9:24-9:29: @3[8]: _7 = (_8.2: i32) +10:8-10:15: @3[12]: _10 = _1 +10:8-10:15: @3[13]: FakeRead(ForMatchedPlace, _10)">@0,1,2,3⦊fn main() { +9:24-9:29: @3[8]: _7 = (_8.2: i32) +10:8-10:15: @3[12]: _10 = _1 +10:8-10:15: @3[13]: FakeRead(ForMatchedPlace, _10)"> // Initialize test constants in a way that cannot be determined at compile time, to ensure let (mut a, mut b, mut c) = (0, 0, 0)⦉@0,1,2,3; - if @0,1,2,3⦊is_true⦉@0,1,2,3 // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; + + let (mut a, mut b, mut c) = (0, 0, 0); + if is_true⦉@0,1,2,3 @4,6⦊{ +10:16-14:6: @6[3]: _9 = const ()">@4,6⦊{ a = 1; +10:16-14:6: @6[3]: _9 = const ()"> a = 1; b = 10; +10:16-14:6: @6[3]: _9 = const ()"> b = 10; c = 100; +10:16-14:6: @6[3]: _9 = const ()"> c = 100; }⦉@4,6@5⦊⦉@5 +10:16-14:6: @6[3]: _9 = const ()"> }⦉@4,6@5⦊⦉@5 let @11⦊somebool⦉@11 = @@ -135,7 +185,7 @@ || @10⦊b < c⦉@10@8⦊⦉@8@9⦊⦉@9 +20:13-20:18: @10[5]: _15 = Lt(move _16, move _17)">@10⦊b < c⦉@10 ; let @15⦊somebool⦉@15 @@ -146,18 +196,18 @@ || @14⦊b < c⦉@14@12⦊⦉@12@13⦊⦉@13 +27:13-27:18: @14[5]: _22 = Lt(move _23, move _24)">@14⦊b < c⦉@14 ; let @19⦊somebool⦉@19 = @15⦊a < b⦉@15 && @18⦊b < c⦉@18@16⦊⦉@16@17⦊⦉@17; +29:29-29:34: @18[5]: _29 = Lt(move _30, move _31)">@18⦊b < c⦉@18; let @23⦊somebool⦉@23 = @19⦊b < a⦉@19 && @22⦊b < c⦉@22@20⦊⦉@20@21⦊⦉@21; +30:29-30:34: @22[5]: _36 = Lt(move _37, move _38)">@22⦊b < c⦉@22; if is_true⦉@23 @24,26⦊{ +35:5-38:6: @26[1]: _39 = const ()">@24,26⦊{ a = 2 +35:5-38:6: @26[1]: _39 = const ()"> a = 2 ; +35:5-38:6: @26[1]: _39 = const ()"> ; }⦉@24,26@25⦊⦉@25 +35:5-38:6: @26[1]: _39 = const ()"> }⦉@24,26@25⦊⦉@25 if if @31⦊!is_true⦉@31 @32,34⦊{ +52:17-54:6: @34[1]: _44 = const ()">@32,34⦊{ a = 2; +52:17-54:6: @34[1]: _44 = const ()"> a = 2; }⦉@32,34@33⦊⦉@33 +52:17-54:6: @34[1]: _44 = const ()"> }⦉@32,34@33⦊⦉@33 if @35⦊is_true⦉@35 fn main() @0,1⦊{ +13:2-13:2: @1.Return: return">@0,1⦊fn main() { fn main() @0,1,2,3⦊{ +25:2-25:2: @3.Return: return">@0,1,2,3⦊fn main() { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - if @0⦊true⦉@0 { +
@0⦊fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + if true⦉@0 { if @1,3⦊false⦉@1,3 { while @6,7⦊true⦉@6,7 @8,10⦊{ - }⦉@8,10 - }@9⦊⦉@9@5⦊⦉@5 - @6,7⦊true⦉@6,7 @8,10⦊{ + }⦉@8,10 + }@5⦊⦉@5 + @11,12,13,14⦊write!(f, "error")⦉@11,12,13,14@11,12,13,14⦊write!(f, "error")⦉@11,12,13,14@16,18,19,20⦊?⦉@16,18,19,20; - } else @2⦊{ - }⦉@2@15⦊⦉@15 + } else @2⦊{ + }⦉@2 @21⦊Ok(())⦉@21 }@22⦊⦉@22
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html index 0f3ea3ce6a89d..cb60276aa1228 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html @@ -69,14 +69,20 @@ -
fn main() { - let @0,1,2,3⦊is_true = std::env::args().len() == 1; +3:9-3:22: @3[3]: FakeRead(ForLet, _5)">@0,1,2,3⦊fn main() { + let is_true = std::env::args().len() == 1; @14,16⦊a < 30⦉@14,16 { @17,19⦊break⦉@17,19; - } - }@18,20,21⦊a -= 5; -@18,20,21⦊ + b -= 5⦉@18,20,21; - if @18,20,21⦊b < 90⦉@18,20,21 { +14:16-14:22: @21[6]: FakeRead(ForMatchedPlace, _31)"> a -= 5; + b -= 5; + if b < 90⦉@18,20,21 { @26,28⦊break 'outer⦉@26,28; } else @27,29⦊{ - a -= 2; +18:24-20:18: @29[1]: _24 = const ()">@27,29⦊{ } +18:24-20:18: @29[1]: _24 = const ()"> a -= 2; }⦉@27,29@23⦊⦉@23 - }@30⦊⦉@30 - }⦉@27,29 + }@23⦊⦉@23 + } + @31,32⦊countdown -= 1⦉@31,32; - }@7⦊⦉@7 + } }@33⦊⦉@33
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html index 4f237d6561d33..6739634f65b30 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.overflow/overflow.main.-------.InstrumentCoverage.0.html @@ -69,9 +69,10 @@ -
fn main() -> Result<(),u8> { - let @0⦊mut countdown = 10⦉@0; +
@0⦊fn main() -> Result<(),u8> { + let mut countdown = 10⦉@0; while @1,2⦊countdown > 0⦉@1,2 { @@ -245,14 +246,14 @@ 23:13-23:44: @17.Call: _32 = Arguments::new_v1(move _33, move _37) -> [return: bb18, unwind: bb23] 23:13-23:44: @18.Call: _31 = _print(move _32) -> [return: bb19, unwind: bb23] 23:13-23:44: @19[6]: _30 = const () -21:33-24:10: @19[8]: _6 = const ()"> }⦉@13,15,16,17,18,19@14⦊⦉@14@20⦊⦉@20 - }⦉@13,15,16,17,18,19@14⦊⦉@14 + @21,22⦊countdown -= 1⦉@21,22; } - @4⦊Ok(()) -}⦉@4
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html index b1dbc40ee206d..c72ad42635620 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.overflow/overflow.might_overflow.-------.InstrumentCoverage.0.html @@ -69,10 +69,12 @@ -
fn might_overflow(to_add: u32) -> u32 { - if @0⦊to_add > 5⦉@0 @0⦊fn might_overflow(to_add: u32) -> u32 { + if to_add > 5⦉@0 @1,3,4,5⦊{ +5:19-7:6: @5[7]: _2 = const ()">@1,3,4,5⦊{ println!("this will probably overflow"); +5:19-7:6: @5[7]: _2 = const ()"> println!("this will probably overflow"); }⦉@1,3,4,5@2⦊⦉@2 +5:19-7:6: @5[7]: _2 = const ()"> }⦉@1,3,4,5@2⦊⦉@2 let fn main() -> Result<(),u8> { - let @0⦊mut countdown = 10⦉@0; +
@0⦊fn main() -> Result<(), u8> { + let mut countdown = 10⦉@0; while @1,2⦊countdown > 0⦉@1,2 { @@ -89,14 +90,14 @@ might_panic(false); }⦉@10,12,13@11⦊⦉@11@14⦊⦉@14 - }⦉@10,12,13@11⦊⦉@11 + @15,16⦊countdown -= 1⦉@15,16; } - @4⦊Ok(()) -}⦉@4
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html index d6002e70af277..290b7b8509908 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.panic_unwind/panic_unwind.might_panic.-------.InstrumentCoverage.0.html @@ -69,7 +69,7 @@ -
fn might_panic(should_panic: bool) { +
@0⦊fn might_panic(should_panic: bool) ⦉@0{ if @0⦊should_panic⦉@0 { fn main() @0,1,2,3,4,5,6,7,8⦊{ +26:2-26:2: @8.Return: return">@0,1,2,3,4,5,6,7,8⦊fn main() { pub fn new(major: usize, minor: usize, patch: usize) -> Self { - @0⦊Self { +18:6-18:6: @0.Return: return">@0⦊pub fn new(major: usize, minor: usize, patch: usize) -> Self { + Self { @14⦊@11,12⦊@13⦊Ord⦉@13⦉@11,12⦉@14@15⦊⦉@15
+
@0,1⦊⦉@0,1Ord@15⦊⦉@15
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html index 52e6b52627693..47f9ab2bd5e7d 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-ge-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html @@ -69,7 +69,7 @@ -
minor: usize, +
minor: usize, // Count: 1 - `PartialOrd` compared `minor` values in 3.2.1 vs. 3.3.0 @0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd@0,1,2,3,4⦊⦉@0,1,2,3,4
+4:39-4:49: @2[10]: _22 = &_5">@0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html index 0ad35d701aafd..2b9a13fe0603f 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-gt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html @@ -69,7 +69,7 @@ -
minor: usize, +
minor: usize, // Count: 1 - `PartialOrd` compared `minor` values in 3.2.1 vs. 3.3.0 @0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd@0,1,2,3,4⦊⦉@0,1,2,3,4
+4:39-4:49: @2[10]: _22 = &_5">@0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html index d43d8526a88e7..5c95a635f0710 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-le-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html @@ -69,7 +69,7 @@ -
minor: usize, +
minor: usize, // Count: 1 - `PartialOrd` compared `minor` values in 3.2.1 vs. 3.3.0 @0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd@0,1,2,3,4⦊⦉@0,1,2,3,4
+4:39-4:49: @2[10]: _22 = &_5">@0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html index a941c08da5d8c..b2b3e172d53db 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-lt-{closure#0}-{closure#0}.-------.InstrumentCoverage.0.html @@ -69,7 +69,7 @@ -
minor: usize, +
minor: usize, // Count: 1 - `PartialOrd` compared `minor` values in 3.2.1 vs. 3.3.0 @0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd@0,1,2,3,4⦊⦉@0,1,2,3,4
+4:39-4:49: @2[10]: _22 = &_5">@0,1,2,3,4⦊⦉@0,1,2,3,4PartialOrd
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html index c5a806f7c1718..2f5092bd51f0a 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html @@ -69,10 +69,6 @@ -
@17⦊@14,15⦊@16⦊PartialOrd⦉@16⦉@14,15⦉@17@18⦊⦉@18
+
@0,1⦊⦉@0,1PartialOrd@18⦊⦉@18
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#4}-assert_receiver_is_total_eq.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#4}-assert_receiver_is_total_eq.-------.InstrumentCoverage.0.html index b4beef867ebcc..ebb8b1c15ce08 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#4}-assert_receiver_is_total_eq.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#4}-assert_receiver_is_total_eq.-------.InstrumentCoverage.0.html @@ -70,6 +70,6 @@
@0⦊Eq⦉@0
+4:37-4:37: @0.Return: return">@0⦊⦉@0Eq
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#6}-eq.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#6}-eq.-------.InstrumentCoverage.0.html index 92f37e4b89a93..2e128181c5e42 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#6}-eq.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#6}-eq.-------.InstrumentCoverage.0.html @@ -69,9 +69,6 @@ -
@2⦊@1⦊PartialEq⦉@1⦉@2@4⦊⦉@4
+
@0⦊⦉@0PartialEq@4⦊⦉@4
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#6}-ne.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#6}-ne.-------.InstrumentCoverage.0.html index df561a7922484..637b1c62086c5 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#6}-ne.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.partial_eq/partial_eq.{impl#6}-ne.-------.InstrumentCoverage.0.html @@ -69,13 +69,6 @@ -
@2⦊@5⦊@6⦊@1⦊PartialEq⦉@1⦉@6⦉@5⦉@2@4⦊⦉@4
+
@0⦊⦉@0PartialEq@4⦊⦉@4
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html index 29d21cf7ba459..1233dfb5bab1f 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.simple_loop/simple_loop.main.-------.InstrumentCoverage.0.html @@ -69,53 +69,108 @@ -
fn main() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let @0,1,2,3⦊is_true = std::env::args().len() == 1; +9:9-9:22: @3[3]: FakeRead(ForLet, _5) +12:9-12:16: @3[6]: _7 = _1 +12:9-12:16: @3[7]: FakeRead(ForMatchedPlace, _7)">@0,1,2,3⦊fn main() { +9:9-9:22: @3[3]: FakeRead(ForLet, _5) +12:9-12:16: @3[6]: _7 = _1 +12:9-12:16: @3[7]: FakeRead(ForMatchedPlace, _7)"> // Initialize test constants in a way that cannot be determined at compile time, to ensure let mut countdown = 0⦉@0,1,2,3; - - if - @0,1,2,3⦊is_true⦉@0,1,2,3 +9:9-9:22: @3[3]: FakeRead(ForLet, _5) +12:9-12:16: @3[6]: _7 = _1 +12:9-12:16: @3[7]: FakeRead(ForMatchedPlace, _7)"> // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; + + let mut countdown = 0; + + if + is_true⦉@0,1,2,3 @4,6⦊{ +13:5-18:6: @6[1]: _6 = const ()">@4,6⦊{ countdown +13:5-18:6: @6[1]: _6 = const ()"> countdown = +13:5-18:6: @6[1]: _6 = const ()"> = 10 +13:5-18:6: @6[1]: _6 = const ()"> 10 ; +13:5-18:6: @6[1]: _6 = const ()"> ; }⦉@4,6@5⦊⦉@5 +13:5-18:6: @6[1]: _6 = const ()"> }⦉@4,6@5⦊⦉@5 loop { @@ -132,15 +187,20 @@ { @10,12⦊break⦉@10,12 ; - } - @11,13⦊countdown - }@11,13⦊ + countdown + -= - 1⦉@11,13 ; - }@7⦊⦉@7 -}@10,12⦊⦉@10,12
+ } +}@10,12⦊⦉@10,12
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.simple_match/simple_match.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.simple_match/simple_match.main.-------.InstrumentCoverage.0.html index f1513d458ebb6..a8bae32490b0b 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.simple_match/simple_match.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.simple_match/simple_match.main.-------.InstrumentCoverage.0.html @@ -69,41 +69,83 @@ -
fn main() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let @0,1,2,3⦊is_true = std::env::args().len() == 1; +9:9-9:22: @3[3]: FakeRead(ForLet, _5) +10:8-10:15: @3[6]: _7 = _1 +10:8-10:15: @3[7]: FakeRead(ForMatchedPlace, _7)">@0,1,2,3⦊fn main() { +9:9-9:22: @3[3]: FakeRead(ForLet, _5) +10:8-10:15: @3[6]: _7 = _1 +10:8-10:15: @3[7]: FakeRead(ForMatchedPlace, _7)"> // Initialize test constants in a way that cannot be determined at compile time, to ensure let mut countdown = 1⦉@0,1,2,3; - if @0,1,2,3⦊is_true⦉@0,1,2,3 @4,6⦊{ +9:9-9:22: @3[3]: FakeRead(ForLet, _5) +10:8-10:15: @3[6]: _7 = _1 +10:8-10:15: @3[7]: FakeRead(ForMatchedPlace, _7)"> // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; + + let mut countdown = 1; + if is_true⦉@0,1,2,3 @4,6⦊{ countdown = 0; +10:16-12:6: @6[1]: _6 = const ()"> countdown = 0; }⦉@4,6@5⦊⦉@5 +10:16-12:6: @6[1]: _6 = const ()"> }⦉@4,6@5⦊⦉@5 for < 1⦉@13,15,17@19⦊⦉@19 +26:17-28:18: @17[5]: _25 = Lt(move _26, const 1_i32)"> 1⦉@13,15,17 => - @18⦊{ - z = countdown - ; - let y = countdown - ; - countdown = 10 - ; - }⦉@18 _ => - @16⦊{}⦉@16 + @16⦊{}⦉@16 } - }@7,8⦊⦉@7,8@20⦊⦉@20 -}@12⦊⦉@12
+ } +}@12⦊⦉@12
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.tight_inf_loop/tight_inf_loop.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.tight_inf_loop/tight_inf_loop.main.-------.InstrumentCoverage.0.html index 5cf76ecf5c2cd..d0ee798ca1978 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.tight_inf_loop/tight_inf_loop.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.tight_inf_loop/tight_inf_loop.main.-------.InstrumentCoverage.0.html @@ -69,12 +69,15 @@ -
fn main() { - if @0⦊false⦉@0 { +
@0⦊fn main() { + if false⦉@0 { @4,5⦊loop {}⦉@4,5@1,3⦊⦉@1,3 - } -}@2⦊⦉@2
+3:14-3:16: @5[0]: _3 = const ()">@4,5⦊loop {}⦉@4,5 + }@2⦊ +}⦉@2
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.try_error_result/try_error_result.call.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.try_error_result/try_error_result.call.-------.InstrumentCoverage.0.html index eeee81daeb21c..804d2f4388679 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.try_error_result/try_error_result.call.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.try_error_result/try_error_result.call.-------.InstrumentCoverage.0.html @@ -69,9 +69,10 @@ -
fn call(return_error: bool) -> Result<(),()> { - if @0⦊return_error⦉@0 { +
@0⦊fn call(return_error: bool) -> Result<(),()> { + if return_error⦉@0 { @1,3⦊Err(())⦉@1,3 } else { diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html index b9391e26c86de..3091eab3e7149 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html @@ -69,9 +69,10 @@ -
fn main() -> Result<(),()> { - let @0,1⦊mut +
@0,1⦊fn main() -> Result<(),()> { + let mut countdown = 10⦉@0,1 ; @@ -124,10 +125,10 @@ @11,29,30⦊call(/*return_error=*/ false)⦉@11,29,30@32,34,35,36⦊?⦉@32,34,35,36; - }@23⦊⦉@23@31⦊⦉@31 - }@37⦊⦉@37 - } + } + @5⦊Ok(())⦉@5 -}@38⦊⦉@38@39⦊⦉@39
+}@39⦊⦉@39
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html index 05c010da7bc54..f037a8ee5c52f 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html @@ -69,9 +69,10 @@ -
fn main() { - let @0⦊num = 9⦉@0; +
@0⦊fn main() { + let num = 9⦉@0; while @1,2⦊num >= 10⦉@1,2 @3,5⦊{ diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.while_early_ret/while_early_ret.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.while_early_ret/while_early_ret.main.-------.InstrumentCoverage.0.html index 87ce501ca8cc6..4cab153e77f53 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.while_early_ret/while_early_ret.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.while_early_ret/while_early_ret.main.-------.InstrumentCoverage.0.html @@ -69,9 +69,10 @@ -
fn main() -> Result<(),u8> { - let @0⦊mut countdown = 10⦉@0; +
@0⦊fn main() -> Result<(),u8> { + let mut countdown = 10⦉@0; while @10⦊Err(1)⦉@10 } ; - } - @7,12⦊countdown - }@7,12⦊ + countdown + -= - 1⦉@7,12 ; } @4⦊Ok(())⦉@4 -}@13⦊⦉@13@14⦊⦉@14
+}@14⦊⦉@14
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.yield/yield.main-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.yield/yield.main-{closure#0}.-------.InstrumentCoverage.0.html index b8458f9d8d655..1e68c345f849b 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.yield/yield.main-{closure#0}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.yield/yield.main-{closure#0}.-------.InstrumentCoverage.0.html @@ -69,8 +69,8 @@ -
|| { - @0⦊yield 1⦉@0; +
|| @0⦊{ + yield 1⦉@0; return @1⦊"foo" || { - @0⦊yield 1⦉@0; +
|| @0⦊{ + yield 1⦉@0; @1⦊yield 2⦉@1; @2⦊yield 3⦉@2; return fn main() { +
@0,1,2⦊fn main() ⦉@0,1,2{ let @0,1,2⦊mut generator⦉@0,1,2 = || { yield 1; return "foo" diff --git a/src/test/run-make-fulldeps/coverage/abort.rs b/src/test/run-make-fulldeps/coverage/abort.rs index 01c5c92054717..52c6ff333e4ea 100644 --- a/src/test/run-make-fulldeps/coverage/abort.rs +++ b/src/test/run-make-fulldeps/coverage/abort.rs @@ -11,12 +11,18 @@ fn might_abort(should_abort: bool) { } } -fn main() -> Result<(),u8> { +fn main() -> Result<(), u8> { let mut countdown = 10; while countdown > 0 { if countdown < 5 { might_abort(false); } + // See discussion (below the `Notes` section) on coverage results for the closing brace. + if countdown < 5 { might_abort(false); } // Counts for different regions on one line. + // For the following example, the closing brace is the last character on the line. + // This shows the character after the closing brace is highlighted, even if that next + // character is a newline. + if countdown < 5 { might_abort(false); } countdown -= 1; } Ok(()) @@ -32,3 +38,30 @@ fn main() -> Result<(),u8> { // intended"). Coverage results would show no executed coverage regions. // 6. If `should_abort` is `true` and the program aborts, the program exits with a `132` status // (on Linux at least). + +/* + +Expect the following coverage results: + +```text + 16| 11| while countdown > 0 { + 17| 10| if countdown < 5 { + 18| 4| might_abort(false); + 19| 6| } +``` + +This is actually correct. + +The condition `countdown < 5` executed 10 times (10 loop iterations). + +It evaluated to `true` 4 times, and executed the `might_abort()` call. + +It skipped the body of the `might_abort()` call 6 times. If an `if` does not include an explicit +`else`, the coverage implementation injects a counter, at the character immediately after the `if`s +closing brace, to count the "implicit" `else`. This is the only way to capture the coverage of the +non-true condition. + +As another example of why this is important, say the condition was `countdown < 50`, which is always +`true`. In that case, we wouldn't have a test for what happens if `might_abort()` is not called. +The closing brace would have a count of `0`, highlighting the missed coverage. +*/ diff --git a/src/test/run-make-fulldeps/coverage/async.rs b/src/test/run-make-fulldeps/coverage/async.rs index f69b8dce89339..fcf6f76944e81 100644 --- a/src/test/run-make-fulldeps/coverage/async.rs +++ b/src/test/run-make-fulldeps/coverage/async.rs @@ -2,37 +2,98 @@ // require-rust-edition-2018 +async fn c(x: u8) -> u8 { + if x == 8 { + 1 + } else { + 0 + } +} + +async fn d() -> u8 { 1 } + +async fn e() -> u8 { 1 } // unused function; executor does not block on `g()` + async fn f() -> u8 { 1 } -async fn foo() -> [bool; 10] { [false; 10] } +async fn foo() -> [bool; 10] { [false; 10] } // unused function; executor does not block on `h()` pub async fn g(x: u8) { match x { + y if e().await == y => (), y if f().await == y => (), _ => (), } } -// #78366: check the reference to the binding is recorded even if the binding is not autorefed - -async fn h(x: usize) { +async fn h(x: usize) { // The function signature is counted when called, but the body is not + // executed (not awaited) so the open brace has a `0` count (at least when + // displayed with `llvm-cov show` in color-mode). match x { y if foo().await[y] => (), _ => (), } } -async fn i(x: u8) { +async fn i(x: u8) { // line coverage is 1, but there are 2 regions: + // (a) the function signature, counted when the function is called; and + // (b) the open brace for the function body, counted once when the body is + // executed asynchronously. match x { + y if c(x).await == y + 1 => { d().await; } y if f().await == y + 1 => (), _ => (), } } +fn j(x: u8) { + // non-async versions of `c()`, `d()`, and `f()` to make it similar to async `i()`. + fn c(x: u8) -> u8 { + if x == 8 { + 1 // This line appears covered, but the 1-character expression span covering the `1` + // is not executed. (`llvm-cov show` displays a `^0` below the `1` ). This is because + // `fn j()` executes the open brace for the funciton body, followed by the function's + // first executable statement, `match x`. Inner function declarations are not + // "visible" to the MIR for `j()`, so the code region counts all lines between the + // open brace and the first statement as executed, which is, in a sense, true. + // `llvm-cov show` overcomes this kind of situation by showing the actual counts + // of the enclosed coverages, (that is, the `1` expression was not executed, and + // accurately displays a `0`). + } else { + 0 + } + } + fn d() -> u8 { 1 } + fn f() -> u8 { 1 } + match x { + y if c(x) == y + 1 => { d(); } + y if f() == y + 1 => (), + _ => (), + } +} + +fn k(x: u8) { // unused function + match x { + 1 => (), + 2 => (), + _ => (), + } +} + +fn l(x: u8) { + match x { + 1 => (), + 2 => (), + _ => (), + } +} + fn main() { let _ = g(10); let _ = h(9); let mut future = Box::pin(i(8)); + j(7); + l(6); executor::block_on(future.as_mut()); } diff --git a/src/test/run-make-fulldeps/coverage/closure.rs b/src/test/run-make-fulldeps/coverage/closure.rs index 66bbbc55399fe..914cb0fe051c7 100644 --- a/src/test/run-make-fulldeps/coverage/closure.rs +++ b/src/test/run-make-fulldeps/coverage/closure.rs @@ -90,4 +90,66 @@ fn main() { a ) ); + + let + quote_closure + = + |val| + { + let mut countdown = 0; + if is_false { + countdown = 10; + } + format!("'{}'", val) + }; + println!( + "Repeated, quoted string: {:?}" + , + std::iter::repeat("repeat me") + .take(5) + .map + ( + quote_closure + ) + .collect::>() + ); + + let + _unused_closure + = + | + mut countdown + | + { + if is_false { + countdown = 10; + } + "closure should be unused".to_owned() + }; + + let mut countdown = 10; + let _short_unused_closure = | _unused_arg: u8 | countdown += 1; + + // Macros can sometimes confuse the coverage results. Compare this next assignment, with an + // unused closure that invokes the `println!()` macro, with the closure assignment above, that + // does not use a macro. The closure above correctly shows `0` executions. + let _short_unused_closure = | _unused_arg: u8 | println!("not called"); + // The closure assignment above is executed, with a line count of `1`, but the `println!()` + // could not have been called, and yet, there is no indication that it wasn't... + + // ...but adding block braces gives the expected result, showing the block was not executed. + let _short_unused_closure_block = | _unused_arg: u8 | { println!("not called") }; + + let _shortish_unused_closure = | _unused_arg: u8 | { + println!("not called") + }; + + let _as_short_unused_closure = | + _unused_arg: u8 + | { println!("not called") }; + + let _almost_as_short_unused_closure = | + _unused_arg: u8 + | { println!("not called") } + ; } diff --git a/src/test/run-make-fulldeps/coverage/conditions.rs b/src/test/run-make-fulldeps/coverage/conditions.rs index 1a8bafa50d468..8a2a0b53e5862 100644 --- a/src/test/run-make-fulldeps/coverage/conditions.rs +++ b/src/test/run-make-fulldeps/coverage/conditions.rs @@ -37,18 +37,6 @@ fn main() { } if true { - // Demonstrate the difference with `TerminatorKind::Assert` as of 2020-11-15. Assert is no - // longer treated as a `BasicCoverageBlock` terminator, which changed the coverage region, - // for the executed `then` block above, to include the closing brace on line 30. That - // changed the line count, but the coverage code region (for the `else if` condition) is - // still valid. - // - // Note that `if` (then) and `else` blocks include the closing brace in their coverage - // code regions when the last line in the block ends in a semicolon, because the Rust - // compiler inserts a `StatementKind::Assign` to assign `const ()` to a `Place`, for the - // empty value for the executed block. When the last line does not end in a semicolon - // (that is, when the block actually results in a value), the additional `Assign` is not - // generated, and the brace is not included. let mut countdown = 0; if true { countdown = 10; @@ -57,11 +45,6 @@ fn main() { if countdown > 7 { countdown -= 4; } - // The closing brace of the `then` branch is now included in the coverage region, and shown - // as "executed" (giving its line a count of 1 here). Since, in the original version above, - // the closing brace shares the same line as the `else if` conditional expression (which is - // not executed if the first `then` condition is true), only the condition's code region is - // marked with a count of 0 now. else if countdown > 2 { if countdown < 1 || countdown > 5 || countdown != 9 { countdown = 0; @@ -70,7 +53,8 @@ fn main() { } else { return; } - } + } // Note: closing brace shows uncovered (vs. `0` for implicit else) because condition literal + // `true` was const-evaluated. The compiler knows the `if` block will be executed. let mut countdown = 0; if true { diff --git a/src/test/run-make-fulldeps/coverage/coverage_tools.mk b/src/test/run-make-fulldeps/coverage/coverage_tools.mk index 867a3566ac3af..7dc485cd94d66 100644 --- a/src/test/run-make-fulldeps/coverage/coverage_tools.mk +++ b/src/test/run-make-fulldeps/coverage/coverage_tools.mk @@ -2,39 +2,16 @@ # file with the line: # # -include ../instrument-coverage/coverage_tools.mk -# -# To enable the Rust compiler option `-C link-dead-code`, also set the following variable -# *BEFORE* the `-include` line: -# -# LINK_DEAD_CODE=yes -include ../tools.mk -ifndef LINK_DEAD_CODE - LINK_DEAD_CODE=no -endif - # ISSUE(76038): When targeting MSVC, Rust binaries built with both `-Z instrument-coverage` and # `-C link-dead-code` typically crash (with a seg-fault) or at best generate an empty `*.profraw` # file, required for coverage reports. # -# Enabling `-C link-dead-code` is preferred when compiling with `-Z instrument-coverage`, so -# `-C link-dead-code` is automatically enabled for all platform targets _except_ MSVC. -# -# Making the state of `-C link-dead-code` platform-dependent creates a problem for cross-platform -# tests because the injected counters, coverage reports, and some low-level output can be different, -# depending on the `-C link-dead-code` setting. For example, coverage reports will not report any -# coverage for a dead code region when the `-C link-dead-code` option is disabled, but with the -# option enabled, those same regions will show coverage counter values (of zero, of course). -# -# To ensure cross-platform `-Z instrument-coverage` generate consistent output, the -# `-C link-dead-code` option is always explicitly enabled or disabled. -# -# Since tests that execute binaries enabled with both `-Z instrument-coverage` and -# `-C link-dead-code` are known to fail, those tests will need the `# ignore-msvc` setting. -# -# If and when the above issue is resolved, the `# ignore-msvc` option can be removed, and the -# tests can be simplified to always test with `-C link-dead-code`. +# Enabling `-C link-dead-code` is not necessary when compiling with `-Z instrument-coverage`, +# due to improvements in the coverage map generation, to add unreachable functions known to Rust. +# Therefore, `-C link-dead-code` is no longer automatically enabled. UNAME = $(shell uname) diff --git a/src/test/run-make-fulldeps/coverage/dead_code.rs b/src/test/run-make-fulldeps/coverage/dead_code.rs new file mode 100644 index 0000000000000..a1285df0ec62a --- /dev/null +++ b/src/test/run-make-fulldeps/coverage/dead_code.rs @@ -0,0 +1,37 @@ +#![allow(unused_assignments, unused_variables)] + +pub fn unused_pub_fn_not_in_library() { + // Initialize test constants in a way that cannot be determined at compile time, to ensure + // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; + + let mut countdown = 0; + if is_true { + countdown = 10; + } +} + +fn unused_fn() { + // Initialize test constants in a way that cannot be determined at compile time, to ensure + // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; + + let mut countdown = 0; + if is_true { + countdown = 10; + } +} + +fn main() { + // Initialize test constants in a way that cannot be determined at compile time, to ensure + // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; + + let mut countdown = 0; + if is_true { + countdown = 10; + } +} diff --git a/src/test/run-make-fulldeps/coverage/generics.rs b/src/test/run-make-fulldeps/coverage/generics.rs index f4e6402694480..cbeda35d3b8cf 100644 --- a/src/test/run-make-fulldeps/coverage/generics.rs +++ b/src/test/run-make-fulldeps/coverage/generics.rs @@ -30,7 +30,11 @@ fn main() -> Result<(),u8> { if true { println!("Exiting with error..."); return Err(1); - } + } // The remaining lines below have no coverage because `if true` (with the constant literal + // `true`) is guaranteed to execute the `then` block, which is also guaranteed to `return`. + // Thankfully, in the normal case, conditions are not guaranteed ahead of time, and as shown + // in other tests, the lines below would have coverage (which would show they had `0` + // executions, assuming the condition still evaluated to `true`). let _ = Firework { strength: 1000 }; diff --git a/src/test/run-make-fulldeps/coverage/panic_unwind.rs b/src/test/run-make-fulldeps/coverage/panic_unwind.rs index 02fa01ab96234..b6c0c080762b2 100644 --- a/src/test/run-make-fulldeps/coverage/panic_unwind.rs +++ b/src/test/run-make-fulldeps/coverage/panic_unwind.rs @@ -10,7 +10,7 @@ fn might_panic(should_panic: bool) { } } -fn main() -> Result<(),u8> { +fn main() -> Result<(), u8> { let mut countdown = 10; while countdown > 0 { if countdown == 1 { @@ -42,8 +42,8 @@ fn main() -> Result<(),u8> { // 5. The reason the coverage results actually show `panic!()` was called is most likely because // `panic!()` is a macro, not a simple function call, and there are other `Statement`s and/or // `Terminator`s that execute with a coverage counter before the panic and unwind occur. -// 6. By best practice, programs should not panic. By design, the coverage implementation will not -// incur additional cost (in program size and execution time) to improve coverage results for -// an event that is not supposted to happen. +// 6. Since the common practice is not to use `panic!()` for error handling, the coverage +// implementation avoids incurring an additional cost (in program size and execution time) to +// improve coverage results for an event that is generally not "supposed" to happen. // 7. FIXME(#78544): This issue describes a feature request for a proposed option to enable // more accurate coverage results for tests that intentionally panic. diff --git a/src/test/run-make-fulldeps/coverage/partial_eq.rs b/src/test/run-make-fulldeps/coverage/partial_eq.rs index 334fb3364ccc4..547026f950235 100644 --- a/src/test/run-make-fulldeps/coverage/partial_eq.rs +++ b/src/test/run-make-fulldeps/coverage/partial_eq.rs @@ -4,8 +4,8 @@ #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct Version { major: usize, - minor: usize, - patch: usize, + minor: usize, // Count: 1 - `PartialOrd` compared `minor` values in 3.2.1 vs. 3.3.0 + patch: usize, // Count: 0 - `PartialOrd` was determined by `minor` (2 < 3) } impl Version { @@ -44,56 +44,3 @@ one expression, which is allowed, but the `function_source_hash` was only passed `function_source_hash` without a code region, if necessary. */ - -// FIXME(richkadel): It may be worth investigating why the coverage report for this test produces -// the following results: - -/* - -1. Why are their two counts below different characters (first and last) of `PartialOrd`, on line 17? - -2. Line 17 is counted twice, but the `::lt` instance shows a line count of 1? Is there a missing - line count with a different instance? Or was it really only called once? - -3. Line 20 shows another line count (of 1) for a line within a `struct` declaration (on only one of - its 3 fields). I doubt the specific field (`minor`) is relevant, but rather I suspect there's a - problem computing the file position here, for some reason. - - - 16| | - 17| 2|#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] - ^1 ^1 ------------------- -|Unexecuted instantiation: ::gt ------------------- -|Unexecuted instantiation: ::le ------------------- -|Unexecuted instantiation: ::ge ------------------- -|::lt: -| 17| 1|#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] ------------------- - 18| |pub struct Version { - 19| | major: usize, - 20| 1| minor: usize, - 21| | patch: usize, - 22| |} - 23| | - 24| |impl Version { - 25| | pub fn new(major: usize, minor: usize, patch: usize) -> Self { - 26| 2| Version { - 27| 2| major, - 28| 2| minor, - 29| 2| patch, - 30| 2| } - 31| 2| } - 32| |} - 33| | - 34| 1|fn main() { - 35| 1| let version_3_2_1 = Version::new(3, 2, 1); - 36| 1| let version_3_3_0 = Version::new(3, 3, 0); - 37| 1| - 38| 1| println!("{:?} < {:?} = {}", version_3_2_1, version_3_3_0, version_3_2_1 < version -_3_3_0); - 39| 1|} -*/ diff --git a/src/test/run-make-fulldeps/coverage/while_early_ret.rs b/src/test/run-make-fulldeps/coverage/while_early_ret.rs index 14ba36238d62f..1fcea9c85c44a 100644 --- a/src/test/run-make-fulldeps/coverage/while_early_ret.rs +++ b/src/test/run-make-fulldeps/coverage/while_early_ret.rs @@ -40,8 +40,3 @@ fn main() -> Result<(),u8> { // and MacOS. But on Windows (MSVC, at least), the call to `std::process::exit()` exits the program // without saving the InstrProf coverage counters. The use of `std::process:exit()` is not critical // to the coverage test for early returns, but this is a limitation that should be fixed. -// -// FIXME(richkadel): Consider creating a new tests for coverage when calling `std::process::exit()`, -// move the `ISSUE` comment to that test, and implement a new test directive that supports skipping -// coverage tests when targeting specific platforms (at least skipping Windows, or MSVC if the -// problem exists on MSVC only). From d96f351fa36d31f2b95b1cd2ad37ceaed3d395a8 Mon Sep 17 00:00:00 2001 From: Rich Kadel Date: Tue, 1 Dec 2020 23:01:26 -0800 Subject: [PATCH 4/7] Addressed feedback from 2020-12-01 Added one more test (two files) showing coverage of generics and unused functions across crates. Created and referenced new Issues, as requested. Added comments. Added a note about the possible effects of compiler options on LLVM coverage maps. --- .../src/coverageinfo/mapgen.rs | 19 + .../rustc_mir/src/transform/coverage/graph.rs | 4 +- .../rustc_mir/src/transform/coverage/mod.rs | 2 + .../rustc_mir/src/transform/coverage/spans.rs | 12 +- .../source-based-code-coverage.md | 2 + .../expected_export_coverage.async.json | 52 +-- .../expected_export_coverage.uses_crate.json | 85 +++++ .../expected_show_coverage.async.txt | 74 ++-- .../expected_show_coverage.partial_eq.txt | 15 + .../expected_show_coverage.uses_crate.txt | 69 ++++ .../expected_show_coverage_counters.async.txt | 81 +++-- ...cted_show_coverage_counters.uses_crate.txt | 80 +++++ ...osure#3}.-------.InstrumentCoverage.0.html | 4 +- ...block_on.-------.InstrumentCoverage.0.html | 326 +++++++++--------- ...osure#0}.-------.InstrumentCoverage.0.html | 79 +++++ .../async.m.-------.InstrumentCoverage.0.html | 74 ++++ ...ync.main.-------.InstrumentCoverage.0.html | 213 ++++++------ ...ate.main.-------.InstrumentCoverage.0.html | 151 ++++++++ ...function.-------.InstrumentCoverage.0.html | 119 +++++++ ...function.-------.InstrumentCoverage.0.html | 133 +++++++ ...function.-------.InstrumentCoverage.0.html | 119 +++++++ ...function.-------.InstrumentCoverage.0.html | 113 ++++++ ...function.-------.InstrumentCoverage.0.html | 133 +++++++ ...function.-------.InstrumentCoverage.0.html | 133 +++++++ src/test/run-make-fulldeps/coverage/async.rs | 3 + .../run-make-fulldeps/coverage/partial_eq.rs | 15 + .../coverage/used_crate/mod.rs | 43 +++ .../run-make-fulldeps/coverage/uses_crate.rs | 10 + 28 files changed, 1797 insertions(+), 366 deletions(-) create mode 100644 src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json create mode 100644 src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt create mode 100644 src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.m-{closure#0}.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.m.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.main.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_function.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_generic_function.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_private_function.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_function.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_generic_function.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_twice_generic_function.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage/used_crate/mod.rs create mode 100644 src/test/run-make-fulldeps/coverage/uses_crate.rs diff --git a/compiler/rustc_codegen_llvm/src/coverageinfo/mapgen.rs b/compiler/rustc_codegen_llvm/src/coverageinfo/mapgen.rs index ced3f21f74497..1c7e727f9b0b9 100644 --- a/compiler/rustc_codegen_llvm/src/coverageinfo/mapgen.rs +++ b/compiler/rustc_codegen_llvm/src/coverageinfo/mapgen.rs @@ -262,6 +262,10 @@ fn add_unreachable_coverage<'tcx>( tcx: TyCtxt<'tcx>, function_coverage_map: &mut FxHashMap, FunctionCoverage<'tcx>>, ) { + // FIXME(#79622): Can this solution be simplified and/or improved? Are there other sources + // of compiler state data that might help (or better sources that could be exposed, but + // aren't yet)? + // Note: If the crate *only* defines generic functions, there are no codegenerated non-generic // functions to add any unreachable code to. In this case, the unreachable code regions will // have no coverage, instead of having coverage with zero executions. @@ -359,6 +363,21 @@ fn add_unreachable_coverage<'tcx>( for def_id in unreachable_def_ids_by_file.remove(&covered_file_name).into_iter().flatten() { + // Note, this loop adds an unreachable code regions for each MIR-derived region. + // Alternatively, we could add a single code region for the maximum span of all + // code regions here. + // + // Observed downsides of this approach are: + // + // 1. The coverage results will appear inconsistent compared with the same (or + // similar) code in a function that is reached. + // 2. If the function is unreachable from one crate but reachable when compiling + // another referencing crate (such as a cross-crate reference to a + // generic function or inlined function), actual coverage regions overlaid + // on a single larger code span of `Zero` coverage can appear confusing or + // wrong. Chaning the unreachable coverage from a `code_region` to a + // `gap_region` can help, but still can look odd with `0` line counts for + // lines between executed (> 0) lines (such as for blank lines or comments). for ®ion in tcx.covered_code_regions(def_id) { function_coverage.add_unreachable_region(region.clone()); } diff --git a/compiler/rustc_mir/src/transform/coverage/graph.rs b/compiler/rustc_mir/src/transform/coverage/graph.rs index 7db88a686a76d..f79f0d3253899 100644 --- a/compiler/rustc_mir/src/transform/coverage/graph.rs +++ b/compiler/rustc_mir/src/transform/coverage/graph.rs @@ -140,7 +140,9 @@ impl CoverageGraph { // The following `TerminatorKind`s are either not expected outside an unwind branch, // or they should not (under normal circumstances) branch. Coverage graphs are - // simplified by assuring coverage results are accurate for well-behaved programs. + // simplified by assuring coverage results are accurate for program executions that + // don't panic. + // // Programs that panic and unwind may record slightly inaccurate coverage results // for a coverage region containing the `Terminator` that began the panic. This // is as intended. (See Issue #78544 for a possible future option to support diff --git a/compiler/rustc_mir/src/transform/coverage/mod.rs b/compiler/rustc_mir/src/transform/coverage/mod.rs index 18249530577a4..10f522d67465d 100644 --- a/compiler/rustc_mir/src/transform/coverage/mod.rs +++ b/compiler/rustc_mir/src/transform/coverage/mod.rs @@ -499,6 +499,8 @@ fn fn_sig_and_body<'tcx>( tcx: TyCtxt<'tcx>, def_id: DefId, ) -> (Option<&'tcx rustc_hir::FnSig<'tcx>>, &'tcx rustc_hir::Body<'tcx>) { + // FIXME(#79625): Consider improving MIR to provide the information needed, to avoid going back + // to HIR for it. let hir_node = tcx.hir().get_if_local(def_id).expect("expected DefId is local"); let fn_body_id = hir::map::associated_body(hir_node).expect("HIR node is a function with body"); (hir::map::fn_sig(hir_node), tcx.hir().body(fn_body_id)) diff --git a/compiler/rustc_mir/src/transform/coverage/spans.rs b/compiler/rustc_mir/src/transform/coverage/spans.rs index 38d66a442add4..6eb89754ee635 100644 --- a/compiler/rustc_mir/src/transform/coverage/spans.rs +++ b/compiler/rustc_mir/src/transform/coverage/spans.rs @@ -359,12 +359,12 @@ impl<'a, 'tcx> CoverageSpans<'a, 'tcx> { } // Async functions wrap a closure that implements the body to be executed. The enclosing - // function is initially called, posts the closure to the executor, and returns. To avoid - // showing the return from the enclosing function as a "covered" return from the closure, - // the enclosing function's `TerminatorKind::Return`s `CoverageSpan` is excluded. The - // closure's `Return` is the only one that will be counted. This provides adequate - // coverage, and more intuitive counts. (Avoids double-counting the closing brace of the - // function body.) + // function is called and returns an `impl Future` without initially executing any of the + // body. To avoid showing the return from the enclosing function as a "covered" return from + // the closure, the enclosing function's `TerminatorKind::Return`s `CoverageSpan` is + // excluded. The closure's `Return` is the only one that will be counted. This provides + // adequate coverage, and more intuitive counts. (Avoids double-counting the closing brace + // of the function body.) let body_ends_with_closure = if let Some(last_covspan) = refined_spans.last() { last_covspan.is_closure && last_covspan.span.hi() == self.body_span.hi() } else { diff --git a/src/doc/unstable-book/src/compiler-flags/source-based-code-coverage.md b/src/doc/unstable-book/src/compiler-flags/source-based-code-coverage.md index 95c2450ae5733..9930bc67cd5d2 100644 --- a/src/doc/unstable-book/src/compiler-flags/source-based-code-coverage.md +++ b/src/doc/unstable-book/src/compiler-flags/source-based-code-coverage.md @@ -76,6 +76,8 @@ $ RUSTC=$HOME/rust/build/x86_64-unknown-linux-gnu/stage1/bin/rustc \ cargo build --example formatjson5 ``` +Note that some compiler options, combined with `-Zinstrument-coverage`, can produce LLVM IR and/or linked binaries that are incompatible with LLVM coverage maps. For example, coverage requires references to actual functions in LLVM IR. If any covered function is optimized out, the coverage tools may not be able to process the coverage results. If you need to pass additional options, with coverage enabled, test them early, to confirm you will get the coverage results you expect. + ## Running the instrumented binary to generate raw coverage profiling data In the previous example, `cargo` generated the coverage-instrumented binary `formatjson5`: diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.async.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.async.json index 4cc6ea39425e1..794a2e382535a 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.async.json +++ b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.async.json @@ -6,50 +6,50 @@ "filename": "../coverage/async.rs", "summary": { "functions": { - "count": 16, - "covered": 15, - "percent": 93.75 + "count": 17, + "covered": 16, + "percent": 94.11764705882352 }, "instantiations": { - "count": 16, - "covered": 15, - "percent": 93.75 + "count": 17, + "covered": 16, + "percent": 94.11764705882352 }, "lines": { - "count": 102, - "covered": 75, - "percent": 73.52941176470588 + "count": 105, + "covered": 77, + "percent": 73.33333333333333 }, "regions": { - "count": 76, - "covered": 35, - "notcovered": 41, - "percent": 46.05263157894737 + "count": 78, + "covered": 36, + "notcovered": 42, + "percent": 46.15384615384615 } } } ], "totals": { "functions": { - "count": 16, - "covered": 15, - "percent": 93.75 + "count": 17, + "covered": 16, + "percent": 94.11764705882352 }, "instantiations": { - "count": 16, - "covered": 15, - "percent": 93.75 + "count": 17, + "covered": 16, + "percent": 94.11764705882352 }, "lines": { - "count": 102, - "covered": 75, - "percent": 73.52941176470588 + "count": 105, + "covered": 77, + "percent": 73.33333333333333 }, "regions": { - "count": 76, - "covered": 35, - "notcovered": 41, - "percent": 46.05263157894737 + "count": 78, + "covered": 36, + "notcovered": 42, + "percent": 46.15384615384615 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json new file mode 100644 index 0000000000000..6189c7b7b641f --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json @@ -0,0 +1,85 @@ +{ + "data": [ + { + "files": [ + { + "filename": "../coverage/used_crate/mod.rs", + "summary": { + "functions": { + "count": 3, + "covered": 3, + "percent": 100 + }, + "instantiations": { + "count": 4, + "covered": 4, + "percent": 100 + }, + "lines": { + "count": 31, + "covered": 14, + "percent": 45.16129032258064 + }, + "regions": { + "count": 16, + "covered": 6, + "notcovered": 10, + "percent": 37.5 + } + } + }, + { + "filename": "../coverage/uses_crate.rs", + "summary": { + "functions": { + "count": 1, + "covered": 1, + "percent": 100 + }, + "instantiations": { + "count": 1, + "covered": 1, + "percent": 100 + }, + "lines": { + "count": 6, + "covered": 6, + "percent": 100 + }, + "regions": { + "count": 1, + "covered": 1, + "notcovered": 0, + "percent": 100 + } + } + } + ], + "totals": { + "functions": { + "count": 4, + "covered": 4, + "percent": 100 + }, + "instantiations": { + "count": 5, + "covered": 5, + "percent": 100 + }, + "lines": { + "count": 37, + "covered": 20, + "percent": 54.054054054054056 + }, + "regions": { + "count": 17, + "covered": 7, + "notcovered": 10, + "percent": 41.17647058823529 + } + } + } + ], + "type": "llvm.coverage.json.export", + "version": "2.0.1" +} diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.async.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.async.txt index f6d02891eea55..5c9dc0d22b548 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.async.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.async.txt @@ -93,39 +93,43 @@ 88| | } 89| 1|} 90| | - 91| 1|fn main() { - 92| 1| let _ = g(10); - 93| 1| let _ = h(9); - 94| 1| let mut future = Box::pin(i(8)); - 95| 1| j(7); - 96| 1| l(6); - 97| 1| executor::block_on(future.as_mut()); - 98| 1|} - 99| | - 100| |mod executor { - 101| | use core::{ - 102| | future::Future, - 103| | pin::Pin, - 104| | task::{Context, Poll, RawWaker, RawWakerVTable, Waker}, - 105| | }; - 106| | - 107| 1| pub fn block_on(mut future: F) -> F::Output { - 108| 1| let mut future = unsafe { Pin::new_unchecked(&mut future) }; - 109| 1| - 110| 1| static VTABLE: RawWakerVTable = RawWakerVTable::new( - 111| 1| |_| unimplemented!("clone"), - 112| 1| |_| unimplemented!("wake"), - 113| 1| |_| unimplemented!("wake_by_ref"), - 114| 1| |_| (), - 115| 1| ); - 116| 1| let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; - 117| 1| let mut context = Context::from_waker(&waker); - 118| | - 119| | loop { - 120| 1| if let Poll::Ready(val) = future.as_mut().poll(&mut context) { - 121| 1| break val; - 122| 0| } - 123| | } - 124| 1| } - 125| |} + 91| 1|async fn m(x: u8) -> u8 { x - 1 } + ^0 + 92| | + 93| 1|fn main() { + 94| 1| let _ = g(10); + 95| 1| let _ = h(9); + 96| 1| let mut future = Box::pin(i(8)); + 97| 1| j(7); + 98| 1| l(6); + 99| 1| let _ = m(5); + 100| 1| executor::block_on(future.as_mut()); + 101| 1|} + 102| | + 103| |mod executor { + 104| | use core::{ + 105| | future::Future, + 106| | pin::Pin, + 107| | task::{Context, Poll, RawWaker, RawWakerVTable, Waker}, + 108| | }; + 109| | + 110| 1| pub fn block_on(mut future: F) -> F::Output { + 111| 1| let mut future = unsafe { Pin::new_unchecked(&mut future) }; + 112| 1| + 113| 1| static VTABLE: RawWakerVTable = RawWakerVTable::new( + 114| 1| |_| unimplemented!("clone"), + 115| 1| |_| unimplemented!("wake"), + 116| 1| |_| unimplemented!("wake_by_ref"), + 117| 1| |_| (), + 118| 1| ); + 119| 1| let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; + 120| 1| let mut context = Context::from_waker(&waker); + 121| | + 122| | loop { + 123| 1| if let Poll::Ready(val) = future.as_mut().poll(&mut context) { + 124| 1| break val; + 125| 0| } + 126| | } + 127| 1| } + 128| |} diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.partial_eq.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.partial_eq.txt index c05cb36cd02b1..0fe124f12d906 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.partial_eq.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.partial_eq.txt @@ -45,4 +45,19 @@ 44| |`function_source_hash` without a code region, if necessary. 45| | 46| |*/ + 47| | + 48| |// FIXME(#79626): The derived traits get coverage, which is great, but some of the traits appear + 49| |// to get two coverage execution counts at different positions: + 50| |// + 51| |// ```text + 52| |// 4| 2|#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] + 53| |// ^0 ^0 ^0 ^0 ^1 ^0 ^0^0 + 54| |// ```text + 55| |// + 56| |// `PartialEq`, `PartialOrd`, and `Ord` (and possibly `Eq`, if the trait name was longer than 2 + 57| |// characters) have counts at their first and last characters. + 58| |// + 59| |// Why is this? Why does `PartialOrd` have two values (1 and 0)? This must mean we are checking + 60| |// distinct coverages, so maybe we don't want to eliminate one of them. Should we merge them? + 61| |// If merged, do we lose some information? diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt new file mode 100644 index 0000000000000..81b355a29acf3 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt @@ -0,0 +1,69 @@ +../coverage/used_crate/mod.rs: + 1| |#![allow(unused_assignments, unused_variables)] + 2| | + 3| |use std::fmt::Debug; + 4| | + 5| 1|pub fn used_function() { + 6| | // Initialize test constants in a way that cannot be determined at compile time, to ensure + 7| | // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + 8| | // dependent conditions. + 9| 1| let is_true = std::env::args().len() == 1; + 10| 1| let mut countdown = 0; + 11| 1| if is_true { + 12| 1| countdown = 10; + 13| 1| } + ^0 + 14| 1| used_twice_generic_function("some str"); + 15| 1|} + 16| | + 17| 1|pub fn used_generic_function(arg: T) { + 18| 1| println!("used_generic_function with {:?}", arg); + 19| 1|} + 20| | + 21| 2|pub fn used_twice_generic_function(arg: T) { + 22| 2| println!("used_twice_generic_function with {:?}", arg); + 23| 2|} + ------------------ + | uses_crate::used_crate::used_twice_generic_function::>: + | 21| 1|pub fn used_twice_generic_function(arg: T) { + | 22| 1| println!("used_twice_generic_function with {:?}", arg); + | 23| 1|} + ------------------ + | uses_crate::used_crate::used_twice_generic_function::<&str>: + | 21| 1|pub fn used_twice_generic_function(arg: T) { + | 22| 1| println!("used_twice_generic_function with {:?}", arg); + | 23| 1|} + ------------------ + 24| | + 25| 0|pub fn unused_generic_function(arg: T) { + 26| 0| println!("unused_generic_function with {:?}", arg); + 27| 0|} + 28| | + 29| 0|pub fn unused_function() { + 30| 0| let is_true = std::env::args().len() == 1; + 31| 0| let mut countdown = 2; + 32| 0| if !is_true { + 33| 0| countdown = 20; + 34| 0| } + 35| 0|} + 36| | + 37| 0|fn unused_private_function() { + 38| 0| let is_true = std::env::args().len() == 1; + 39| 0| let mut countdown = 2; + 40| 0| if !is_true { + 41| 0| countdown = 20; + 42| 0| } + 43| 0|} + +../coverage/uses_crate.rs: + 1| |#![allow(unused_assignments, unused_variables)] + 2| | + 3| |mod used_crate; + 4| | + 5| 1|fn main() { + 6| 1| used_crate::used_function(); + 7| 1| let some_vec = vec![1, 2, 3, 4]; + 8| 1| used_crate::used_generic_function(&some_vec); + 9| 1| used_crate::used_twice_generic_function(some_vec); + 10| 1|} + diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.async.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.async.txt index ce6ee3b1ed8df..2fac0fea84b19 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.async.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.async.txt @@ -26,18 +26,18 @@ Counter in file 0 77:14 -> 77:16, 0 Counter in file 0 78:14 -> 78:16, 0 Counter in file 0 79:14 -> 79:16, 0 Counter in file 0 81:1 -> 81:2, 0 +Counter in file 0 91:25 -> 91:34, 0 Counter in file 0 5:1 -> 5:25, #1 -Counter in file 0 21:1 -> 21:23, #1 -Counter in file 0 17:20 -> 17:21, #1 -Counter in file 0 67:5 -> 67:23, #1 -Counter in file 0 38:1 -> 38:19, #1 -Counter in file 0 13:20 -> 13:21, #1 -Counter in file 0 29:1 -> 29:22, #1 -Counter in file 0 91:1 -> 98:2, #1 Counter in file 0 5:25 -> 6:14, #1 Counter in file 0 7:9 -> 7:10, #2 Counter in file 0 9:9 -> 9:10, (#1 - #2) Counter in file 0 11:1 -> 11:2, (#2 + (#1 - #2)) +Counter in file 0 21:1 -> 21:23, #1 +Counter in file 0 67:5 -> 67:23, #1 +Counter in file 0 38:1 -> 38:19, #1 +Counter in file 0 29:1 -> 29:22, #1 +Counter in file 0 93:1 -> 101:2, #1 +Counter in file 0 91:1 -> 91:25, #1 Counter in file 0 38:19 -> 42:12, #1 Counter in file 0 43:9 -> 43:10, #3 Counter in file 0 43:14 -> 43:18, (#1 + 0) @@ -53,6 +53,7 @@ Counter in file 0 51:5 -> 52:18, #1 Counter in file 0 53:13 -> 53:14, #2 Counter in file 0 63:13 -> 63:14, (#1 - #2) Counter in file 0 65:5 -> 65:6, (#2 + (#1 - #2)) +Counter in file 0 17:20 -> 17:21, #1 Counter in file 0 49:1 -> 68:12, #1 Counter in file 0 69:9 -> 69:10, #2 Counter in file 0 69:14 -> 69:27, (#1 + 0) @@ -68,17 +69,18 @@ Counter in file 0 86:14 -> 86:16, #2 Counter in file 0 87:14 -> 87:16, #3 Counter in file 0 89:1 -> 89:2, (#3 + (#2 + (#1 - (#3 + #2)))) Counter in file 0 17:1 -> 17:20, #1 +Counter in file 0 13:20 -> 13:21, #1 Counter in file 0 66:5 -> 66:23, #1 -Counter in file 0 107:5 -> 117:54, #1 -Counter in file 0 120:32 -> 120:35, ((#1 + #2) - #2) -Counter in file 0 120:39 -> 120:73, (#1 + #2) -Counter in file 0 121:23 -> 121:26, (((#1 + #2) - #2) + 0) -Counter in file 0 122:14 -> 122:15, #2 -Counter in file 0 124:5 -> 124:6, (((#1 + #2) - #2) + 0) -Counter in file 0 114:17 -> 114:19, #1 Counter in file 0 17:9 -> 17:10, #1 Counter in file 0 17:9 -> 17:10, #1 +Counter in file 0 117:17 -> 117:19, #1 Counter in file 0 17:9 -> 17:10, #1 +Counter in file 0 110:5 -> 120:54, #1 +Counter in file 0 123:32 -> 123:35, ((#1 + #2) - #2) +Counter in file 0 123:39 -> 123:73, (#1 + #2) +Counter in file 0 124:23 -> 124:26, (((#1 + #2) - #2) + 0) +Counter in file 0 125:14 -> 125:15, #2 +Counter in file 0 127:5 -> 127:6, (((#1 + #2) - #2) + 0) Emitting segments for file: ../coverage/async.rs Combined regions: 5:1 -> 5:25 (count=1) @@ -149,14 +151,16 @@ Combined regions: 86:14 -> 86:16 (count=0) 87:14 -> 87:16 (count=1) 89:1 -> 89:2 (count=1) - 91:1 -> 98:2 (count=1) - 107:5 -> 117:54 (count=1) - 114:17 -> 114:19 (count=1) - 120:32 -> 120:35 (count=1) - 120:39 -> 120:73 (count=1) - 121:23 -> 121:26 (count=1) - 122:14 -> 122:15 (count=0) - 124:5 -> 124:6 (count=1) + 91:1 -> 91:25 (count=1) + 91:25 -> 91:34 (count=0) + 93:1 -> 101:2 (count=1) + 110:5 -> 120:54 (count=1) + 117:17 -> 117:19 (count=1) + 123:32 -> 123:35 (count=1) + 123:39 -> 123:73 (count=1) + 124:23 -> 124:26 (count=1) + 125:14 -> 125:15 (count=0) + 127:5 -> 127:6 (count=1) Segment at 5:1 (count = 1), RegionEntry Segment at 5:25 (count = 1), RegionEntry Segment at 6:14 (count = 0), Skipped @@ -287,18 +291,21 @@ Segment at 87:16 (count = 0), Skipped Segment at 89:1 (count = 1), RegionEntry Segment at 89:2 (count = 0), Skipped Segment at 91:1 (count = 1), RegionEntry -Segment at 98:2 (count = 0), Skipped -Segment at 107:5 (count = 1), RegionEntry -Segment at 114:17 (count = 1), RegionEntry -Segment at 114:19 (count = 1) -Segment at 117:54 (count = 0), Skipped -Segment at 120:32 (count = 1), RegionEntry -Segment at 120:35 (count = 0), Skipped -Segment at 120:39 (count = 1), RegionEntry -Segment at 120:73 (count = 0), Skipped -Segment at 121:23 (count = 1), RegionEntry -Segment at 121:26 (count = 0), Skipped -Segment at 122:14 (count = 0), RegionEntry -Segment at 122:15 (count = 0), Skipped -Segment at 124:5 (count = 1), RegionEntry -Segment at 124:6 (count = 0), Skipped +Segment at 91:25 (count = 0), RegionEntry +Segment at 91:34 (count = 0), Skipped +Segment at 93:1 (count = 1), RegionEntry +Segment at 101:2 (count = 0), Skipped +Segment at 110:5 (count = 1), RegionEntry +Segment at 117:17 (count = 1), RegionEntry +Segment at 117:19 (count = 1) +Segment at 120:54 (count = 0), Skipped +Segment at 123:32 (count = 1), RegionEntry +Segment at 123:35 (count = 0), Skipped +Segment at 123:39 (count = 1), RegionEntry +Segment at 123:73 (count = 0), Skipped +Segment at 124:23 (count = 1), RegionEntry +Segment at 124:26 (count = 0), Skipped +Segment at 125:14 (count = 0), RegionEntry +Segment at 125:15 (count = 0), Skipped +Segment at 127:5 (count = 1), RegionEntry +Segment at 127:6 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt new file mode 100644 index 0000000000000..8901019f19109 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt @@ -0,0 +1,80 @@ +Counter in file 0 17:1 -> 19:2, #1 +Counter in file 0 25:1 -> 27:2, 0 +Counter in file 0 29:1 -> 32:16, 0 +Counter in file 0 32:17 -> 34:6, 0 +Counter in file 0 34:6 -> 34:7, 0 +Counter in file 0 35:1 -> 35:2, 0 +Counter in file 0 37:1 -> 40:16, 0 +Counter in file 0 40:17 -> 42:6, 0 +Counter in file 0 42:6 -> 42:7, 0 +Counter in file 0 43:1 -> 43:2, 0 +Counter in file 0 5:1 -> 5:24, #1 +Counter in file 0 9:9 -> 11:15, (#1 + 0) +Counter in file 0 11:16 -> 13:6, #2 +Counter in file 0 13:6 -> 13:7, (#1 - #2) +Counter in file 0 14:5 -> 15:2, (#2 + (#1 - #2)) +Counter in file 0 21:1 -> 23:2, #1 +Counter in file 0 21:1 -> 23:2, #1 +Counter in file 0 5:1 -> 10:2, #1 +Emitting segments for file: ../coverage/used_crate/mod.rs +Combined regions: + 5:1 -> 5:24 (count=1) + 9:9 -> 11:15 (count=1) + 11:16 -> 13:6 (count=1) + 13:6 -> 13:7 (count=0) + 14:5 -> 15:2 (count=1) + 17:1 -> 19:2 (count=1) + 21:1 -> 23:2 (count=2) + 25:1 -> 27:2 (count=0) + 29:1 -> 32:16 (count=0) + 32:17 -> 34:6 (count=0) + 34:6 -> 34:7 (count=0) + 35:1 -> 35:2 (count=0) + 37:1 -> 40:16 (count=0) + 40:17 -> 42:6 (count=0) + 42:6 -> 42:7 (count=0) + 43:1 -> 43:2 (count=0) +Segment at 5:1 (count = 1), RegionEntry +Segment at 5:24 (count = 0), Skipped +Segment at 9:9 (count = 1), RegionEntry +Segment at 11:15 (count = 0), Skipped +Segment at 11:16 (count = 1), RegionEntry +Segment at 13:6 (count = 0), RegionEntry +Segment at 13:7 (count = 0), Skipped +Segment at 14:5 (count = 1), RegionEntry +Segment at 15:2 (count = 0), Skipped +Segment at 17:1 (count = 1), RegionEntry +Segment at 19:2 (count = 0), Skipped +Segment at 21:1 (count = 2), RegionEntry +Segment at 23:2 (count = 0), Skipped +Segment at 25:1 (count = 0), RegionEntry +Segment at 27:2 (count = 0), Skipped +Segment at 29:1 (count = 0), RegionEntry +Segment at 32:16 (count = 0), Skipped +Segment at 32:17 (count = 0), RegionEntry +Segment at 34:6 (count = 0), RegionEntry +Segment at 34:7 (count = 0), Skipped +Segment at 35:1 (count = 0), RegionEntry +Segment at 35:2 (count = 0), Skipped +Segment at 37:1 (count = 0), RegionEntry +Segment at 40:16 (count = 0), Skipped +Segment at 40:17 (count = 0), RegionEntry +Segment at 42:6 (count = 0), RegionEntry +Segment at 42:7 (count = 0), Skipped +Segment at 43:1 (count = 0), RegionEntry +Segment at 43:2 (count = 0), Skipped +Emitting segments for function: _RINvNtCs4fqI2P2rA04_10uses_crate10used_crate27used_twice_generic_functionINtNtCs3QflaznQylx_5alloc3vec3VeclEEB4_ +Combined regions: + 21:1 -> 23:2 (count=1) +Segment at 21:1 (count = 1), RegionEntry +Segment at 23:2 (count = 0), Skipped +Emitting segments for function: _RINvNtCs4fqI2P2rA04_10uses_crate10used_crate27used_twice_generic_functionReEB4_ +Combined regions: + 21:1 -> 23:2 (count=1) +Segment at 21:1 (count = 1), RegionEntry +Segment at 23:2 (count = 0), Skipped +Emitting segments for file: ../coverage/uses_crate.rs +Combined regions: + 5:1 -> 10:2 (count=1) +Segment at 5:1 (count = 1), RegionEntry +Segment at 10:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html index 996c537225d95..ef2fe7d06825d 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on-VTABLE-{closure#3}.-------.InstrumentCoverage.0.html @@ -69,7 +69,7 @@ -
|_| @0⦊()⦉@0
+
|_| @0⦊()⦉@0
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html index 0c597d40de04f..81310c8cb25aa 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.executor-block_on.-------.InstrumentCoverage.0.html @@ -69,171 +69,171 @@ -
@0,1,2,3,4,5⦊pub fn block_on<F: Future>(mut future: F) -> F::Output { - let mut future = unsafe { Pin::new_unchecked(&mut future) }; - - static VTABLE: RawWakerVTable = RawWakerVTable::new( - |_| unimplemented!("clone"), - |_| unimplemented!("wake"), - |_| unimplemented!("wake_by_ref"), - |_| (), - ); - let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; - let mut context = Context::from_waker(&waker)⦉@0,1,2,3,4,5; +
@0,1,2,3,4,5⦊pub fn block_on<F: Future>(mut future: F) -> F::Output { + let mut future = unsafe { Pin::new_unchecked(&mut future) }; + + static VTABLE: RawWakerVTable = RawWakerVTable::new( + |_| unimplemented!("clone"), + |_| unimplemented!("wake"), + |_| unimplemented!("wake_by_ref"), + |_| (), + ); + let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; + let mut context = Context::from_waker(&waker)⦉@0,1,2,3,4,5; loop { - if let Poll::Ready(@10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17) = @6,7,8,9⦊future.as_mut().poll(&mut context)⦉@6,7,8,9 { - break @10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17; - }@11,13⦊⦉@11,13 + if let Poll::Ready(@10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17) = @6,7,8,9⦊future.as_mut().poll(&mut context)⦉@6,7,8,9 { + break @10,12,14,15,16,17⦊val⦉@10,12,14,15,16,17; + }@11,13⦊⦉@11,13 } - }@10,12,14,15,16,17⦊⦉@10,12,14,15,16,17
+ }@10,12,14,15,16,17⦊⦉@10,12,14,15,16,17
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.m-{closure#0}.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.m-{closure#0}.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..9cf86ce34a04d --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.m-{closure#0}.-------.InstrumentCoverage.0.html @@ -0,0 +1,79 @@ + + + + +async.m-{closure#0} - Coverage Spans + + + +
@0,1⦊{ x - 1 }⦉@0,1
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.m.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.m.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..04412c1d99427 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.m.-------.InstrumentCoverage.0.html @@ -0,0 +1,74 @@ + + + + +async.m - Coverage Spans + + + +
@0,1⦊async fn m(x: u8) -> u8 ⦉@0,1{ x - 1 }
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html index 2b0eb4f43c786..313a36ed6c2f2 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.async/async.main.-------.InstrumentCoverage.0.html @@ -69,101 +69,122 @@ -
@0,1,2,3,4,5,6,7,8,9,10,11⦊fn main() { - let _ = g(10); - let _ = h(9); - let mut future = Box::pin(i(8)); - j(7); - l(6); - executor::block_on(future.as_mut()); -}⦉@0,1,2,3,4,5,6,7,8,9,10,11
+
@0,1,2,3,4,5,6,7,8,9,10,11,12,13⦊fn main() { + let _ = g(10); + let _ = h(9); + let mut future = Box::pin(i(8)); + j(7); + l(6); + let _ = m(5); + executor::block_on(future.as_mut()); +}⦉@0,1,2,3,4,5,6,7,8,9,10,11,12,13
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.main.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..52c99558de6c5 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.main.-------.InstrumentCoverage.0.html @@ -0,0 +1,151 @@ + + + + +uses_crate.main - Coverage Spans + + + +
@0,1,2,3,4,5,6,7⦊fn main() { + used_crate::used_function(); + let some_vec = vec![1, 2, 3, 4]; + used_crate::used_generic_function(&some_vec); + used_crate::used_twice_generic_function(some_vec); +}⦉@0,1,2,3,4,5,6,7
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_function.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..42ba0458349ff --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_function.-------.InstrumentCoverage.0.html @@ -0,0 +1,119 @@ + + + + +uses_crate.used_crate-unused_function - Coverage Spans + + + +
@0,1,2,3⦊pub fn unused_function() { + let is_true = std::env::args().len() == 1; + let mut countdown = 2; + if !is_true⦉@0,1,2,3 @4,6⦊{ + countdown = 20; + }⦉@4,6@5⦊⦉@5 +}@7⦊⦉@7
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_generic_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_generic_function.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..d89963a32ce6c --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_generic_function.-------.InstrumentCoverage.0.html @@ -0,0 +1,133 @@ + + + + +uses_crate.used_crate-unused_generic_function - Coverage Spans + + + +
@0,1,2,3,4⦊pub fn unused_generic_function<T: Debug>(arg: T) { + println!("unused_generic_function with {:?}", arg); +}⦉@0,1,2,3,4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_private_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_private_function.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..10e71152c5343 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_private_function.-------.InstrumentCoverage.0.html @@ -0,0 +1,119 @@ + + + + +uses_crate.used_crate-unused_private_function - Coverage Spans + + + +
@0,1,2,3⦊fn unused_private_function() { + let is_true = std::env::args().len() == 1; + let mut countdown = 2; + if !is_true⦉@0,1,2,3 @4,6⦊{ + countdown = 20; + }⦉@4,6@5⦊⦉@5 +}@7⦊⦉@7
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_function.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..15dce97e742b0 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_function.-------.InstrumentCoverage.0.html @@ -0,0 +1,113 @@ + + + + +uses_crate.used_crate-used_function - Coverage Spans + + + +
@0,1,2,3⦊pub fn used_function() ⦉@0,1,2,3{ + // Initialize test constants in a way that cannot be determined at compile time, to ensure + // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let @0,1,2,3⦊is_true = std::env::args().len() == 1; + let mut countdown = 0; + if is_true⦉@0,1,2,3 @4,6⦊{ + countdown = 10; + }⦉@4,6@5⦊⦉@5 + @7,8⦊used_twice_generic_function("some str"); +}⦉@7,8
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_generic_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_generic_function.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..e47ed0b381786 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_generic_function.-------.InstrumentCoverage.0.html @@ -0,0 +1,133 @@ + + + + +uses_crate.used_crate-used_generic_function - Coverage Spans + + + +
@0,1,2,3,4⦊pub fn used_generic_function<T: Debug>(arg: T) { + println!("used_generic_function with {:?}", arg); +}⦉@0,1,2,3,4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_twice_generic_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_twice_generic_function.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..ef63db45cc07b --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_twice_generic_function.-------.InstrumentCoverage.0.html @@ -0,0 +1,133 @@ + + + + +uses_crate.used_crate-used_twice_generic_function - Coverage Spans + + + +
@0,1,2,3,4⦊pub fn used_twice_generic_function<T: Debug>(arg: T) { + println!("used_twice_generic_function with {:?}", arg); +}⦉@0,1,2,3,4
+ + diff --git a/src/test/run-make-fulldeps/coverage/async.rs b/src/test/run-make-fulldeps/coverage/async.rs index fcf6f76944e81..491d274654387 100644 --- a/src/test/run-make-fulldeps/coverage/async.rs +++ b/src/test/run-make-fulldeps/coverage/async.rs @@ -88,12 +88,15 @@ fn l(x: u8) { } } +async fn m(x: u8) -> u8 { x - 1 } + fn main() { let _ = g(10); let _ = h(9); let mut future = Box::pin(i(8)); j(7); l(6); + let _ = m(5); executor::block_on(future.as_mut()); } diff --git a/src/test/run-make-fulldeps/coverage/partial_eq.rs b/src/test/run-make-fulldeps/coverage/partial_eq.rs index 547026f950235..7d265ba66a445 100644 --- a/src/test/run-make-fulldeps/coverage/partial_eq.rs +++ b/src/test/run-make-fulldeps/coverage/partial_eq.rs @@ -44,3 +44,18 @@ one expression, which is allowed, but the `function_source_hash` was only passed `function_source_hash` without a code region, if necessary. */ + +// FIXME(#79626): The derived traits get coverage, which is great, but some of the traits appear +// to get two coverage execution counts at different positions: +// +// ```text +// 4| 2|#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +// ^0 ^0 ^0 ^0 ^1 ^0 ^0^0 +// ```text +// +// `PartialEq`, `PartialOrd`, and `Ord` (and possibly `Eq`, if the trait name was longer than 2 +// characters) have counts at their first and last characters. +// +// Why is this? Why does `PartialOrd` have two values (1 and 0)? This must mean we are checking +// distinct coverages, so maybe we don't want to eliminate one of them. Should we merge them? +// If merged, do we lose some information? diff --git a/src/test/run-make-fulldeps/coverage/used_crate/mod.rs b/src/test/run-make-fulldeps/coverage/used_crate/mod.rs new file mode 100644 index 0000000000000..825eff4d35248 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage/used_crate/mod.rs @@ -0,0 +1,43 @@ +#![allow(unused_assignments, unused_variables)] + +use std::fmt::Debug; + +pub fn used_function() { + // Initialize test constants in a way that cannot be determined at compile time, to ensure + // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; + let mut countdown = 0; + if is_true { + countdown = 10; + } + used_twice_generic_function("some str"); +} + +pub fn used_generic_function(arg: T) { + println!("used_generic_function with {:?}", arg); +} + +pub fn used_twice_generic_function(arg: T) { + println!("used_twice_generic_function with {:?}", arg); +} + +pub fn unused_generic_function(arg: T) { + println!("unused_generic_function with {:?}", arg); +} + +pub fn unused_function() { + let is_true = std::env::args().len() == 1; + let mut countdown = 2; + if !is_true { + countdown = 20; + } +} + +fn unused_private_function() { + let is_true = std::env::args().len() == 1; + let mut countdown = 2; + if !is_true { + countdown = 20; + } +} diff --git a/src/test/run-make-fulldeps/coverage/uses_crate.rs b/src/test/run-make-fulldeps/coverage/uses_crate.rs new file mode 100644 index 0000000000000..473d43217a994 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage/uses_crate.rs @@ -0,0 +1,10 @@ +#![allow(unused_assignments, unused_variables)] + +mod used_crate; + +fn main() { + used_crate::used_function(); + let some_vec = vec![1, 2, 3, 4]; + used_crate::used_generic_function(&some_vec); + used_crate::used_twice_generic_function(some_vec); +} From b0c140a55b589680bbcd76d18fae9f411a7af0c5 Mon Sep 17 00:00:00 2001 From: Rich Kadel Date: Wed, 2 Dec 2020 09:43:46 -0800 Subject: [PATCH 5/7] Workaround for inconsistent order of llvm-cov results on Windows --- .../coverage-reports/Makefile | 39 ++++++++++++++++ .../expected_export_coverage.uses_crate.json | 46 ++++--------------- .../expected_show_coverage.uses_crate.txt | 13 ------ ...cted_show_coverage_counters.uses_crate.txt | 5 -- 4 files changed, 49 insertions(+), 54 deletions(-) diff --git a/src/test/run-make-fulldeps/coverage-reports/Makefile b/src/test/run-make-fulldeps/coverage-reports/Makefile index 0902ad74051f9..91390f6cc02e4 100644 --- a/src/test/run-make-fulldeps/coverage-reports/Makefile +++ b/src/test/run-make-fulldeps/coverage-reports/Makefile @@ -22,6 +22,43 @@ ifeq ($(LLVM_COV_DEBUG), 1) DEBUG_FLAG=--debug endif +# FIXME(richkadel): I'm adding `--ignore-filename-regex=` line(s) for specific test(s) that produce +# `llvm-cov` results for multiple files (for example `uses_crate.rs` and `used_crate/mod.rs`) as a +# workaround for two problems causing tests to fail on Windows: +# +# 1. When multiple files appear in the `llvm-cov show` results, each file's coverage results can +# appear in different a different order. Whether this is random or, somehow, platform-specific, +# the Windows output flips the order of the files, compared to Linux. In the `uses_crate.rs` +# test, the only test-unique (interesting) results we care about are the results for only one +# of the two files, `mod/uses_crate.rs`, so the workaround is to ignore all but this one file. +# In the future, we may want a more sophisticated solution that splits apart `llvm-cov show` +# results into separate results files for each result (taking care not to create new file +# paths that might be too long for Windows MAX_PATH limits when creating these new sub-results, +# as well). +# 2. When multiple files appear in the `llvm-cov show` results, the results for each file are +# prefixed with their filename, including platform-specific path separators (`\` for Windows, +# and `/` everywhere else). This could be filtered or normalized of course, but by ignoring +# coverage results for all but one of the file, the filenames are no longer included anyway. +# If this changes (if/when we decide to support `llvm-cov show` results for multiple files), +# the file path separator differences may need to be addressed. +# +# Since this is only a workaround, I decided to implement the override by adding an option for +# each file to be ignored, using a `--ignore-filename-regex=` entry for each one, rather than +# implement some more sophisticated solution with a new custom test directive in the test file +# itself (similar to `expect-exit-status`) because that would add a lot of complexity and still +# be a workaround, with the same result, with no benefit. +# +# Yes these `--ignore-filename-regex=` options are included in all invocations of `llvm-cov show` +# for now, but it is effectively ignored for all tests that don't include this file anyway. +# +# Note that it's also possible the `_counters..txt` and `.json` files may order +# results from multiple files inconsistently, which might also have to be accomodated if and when +# we allow `llvm-cov` to produce results for multiple files. (The path separators appear to be +# normalized to `/` in those files, thankfully.) But since we are ignoring results for all but one +# file, this workaround addresses those potential issues as well. +LLVM_COV_IGNORE_FILES=\ + --ignore-filename-regex=uses_crate.rs + # When generating `expected_*` results (using `x.py test --bless`), the `--debug` flag is forced. # If assertions are disabled, the command will fail with an error, rather than attempt to generate # only partial results. @@ -76,6 +113,7 @@ endif # Generate a coverage report using `llvm-cov show`. "$(LLVM_BIN_DIR)"/llvm-cov show \ $(DEBUG_FLAG) \ + $(LLVM_COV_IGNORE_FILES) \ --Xdemangler="$(RUST_DEMANGLER)" \ --show-line-counts-or-regions \ --instr-profile="$(TMPDIR)"/$@.profdata \ @@ -133,6 +171,7 @@ endif # Generate a coverage report in JSON, using `llvm-cov export`, and fail if # there are differences from the expected output. "$(LLVM_BIN_DIR)"/llvm-cov export \ + $(LLVM_COV_IGNORE_FILES) \ --summary-only \ --instr-profile="$(TMPDIR)"/$@.profdata \ $(call BIN,"$(TMPDIR)"/$@) \ diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json index 6189c7b7b641f..fc0d7db7c2992 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json +++ b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json @@ -27,55 +27,29 @@ "percent": 37.5 } } - }, - { - "filename": "../coverage/uses_crate.rs", - "summary": { - "functions": { - "count": 1, - "covered": 1, - "percent": 100 - }, - "instantiations": { - "count": 1, - "covered": 1, - "percent": 100 - }, - "lines": { - "count": 6, - "covered": 6, - "percent": 100 - }, - "regions": { - "count": 1, - "covered": 1, - "notcovered": 0, - "percent": 100 - } - } } ], "totals": { "functions": { - "count": 4, - "covered": 4, + "count": 3, + "covered": 3, "percent": 100 }, "instantiations": { - "count": 5, - "covered": 5, + "count": 4, + "covered": 4, "percent": 100 }, "lines": { - "count": 37, - "covered": 20, - "percent": 54.054054054054056 + "count": 31, + "covered": 14, + "percent": 45.16129032258064 }, "regions": { - "count": 17, - "covered": 7, + "count": 16, + "covered": 6, "notcovered": 10, - "percent": 41.17647058823529 + "percent": 37.5 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt index 81b355a29acf3..ad1bdb5d6a54a 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt @@ -1,4 +1,3 @@ -../coverage/used_crate/mod.rs: 1| |#![allow(unused_assignments, unused_variables)] 2| | 3| |use std::fmt::Debug; @@ -55,15 +54,3 @@ 42| 0| } 43| 0|} -../coverage/uses_crate.rs: - 1| |#![allow(unused_assignments, unused_variables)] - 2| | - 3| |mod used_crate; - 4| | - 5| 1|fn main() { - 6| 1| used_crate::used_function(); - 7| 1| let some_vec = vec![1, 2, 3, 4]; - 8| 1| used_crate::used_generic_function(&some_vec); - 9| 1| used_crate::used_twice_generic_function(some_vec); - 10| 1|} - diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt index 8901019f19109..e8be1e685e652 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt @@ -73,8 +73,3 @@ Combined regions: 21:1 -> 23:2 (count=1) Segment at 21:1 (count = 1), RegionEntry Segment at 23:2 (count = 0), Skipped -Emitting segments for file: ../coverage/uses_crate.rs -Combined regions: - 5:1 -> 10:2 (count=1) -Segment at 5:1 (count = 1), RegionEntry -Segment at 10:2 (count = 0), Skipped From f101fd8ff62431927d19c70a06a68483cce37c1f Mon Sep 17 00:00:00 2001 From: Rich Kadel Date: Wed, 2 Dec 2020 15:39:40 -0800 Subject: [PATCH 6/7] Fixed cross-crate generic call test to compile lib and bin separately The original test produced a single crate with two mods, which was not the goal of the test. --- .../coverage-reports/Makefile | 31 ++- .../expected_export_coverage.uses_crate.json | 54 ++--- .../expected_show_coverage.async.txt | 2 +- .../expected_show_coverage.if_else.txt | 2 +- .../expected_show_coverage.inner_items.txt | 2 +- ...xpected_show_coverage.loop_break_value.txt | 2 +- .../expected_show_coverage.loops_branches.txt | 2 +- .../expected_show_coverage.simple_match.txt | 2 +- .../expected_show_coverage.uses_crate.txt | 130 ++++++++++-- .../expected_show_coverage_counters.async.txt | 12 +- ...cted_show_coverage_counters.uses_crate.txt | 91 ++++++--- .../coverage-spanview/Makefile | 39 +++- ...unction.-------.InstrumentCoverage.0.html} | 6 +- ...function.-------.InstrumentCoverage.0.html | 133 ++++++++++++ ...unction.-------.InstrumentCoverage.0.html} | 96 ++++----- ...ib_crate.-------.InstrumentCoverage.0.html | 190 ++++++++++++++++++ ...function.-------.InstrumentCoverage.0.html | 133 ++++++++++++ ...unction.-------.InstrumentCoverage.0.html} | 10 +- ...function.-------.InstrumentCoverage.0.html | 133 ++++++++++++ ...function.-------.InstrumentCoverage.0.html | 133 ++++++++++++ ...function.-------.InstrumentCoverage.0.html | 133 ++++++++++++ ...ate.main.-------.InstrumentCoverage.0.html | 138 ++++++++----- ...function.-------.InstrumentCoverage.0.html | 133 ------------ ...function.-------.InstrumentCoverage.0.html | 133 ------------ ...function.-------.InstrumentCoverage.0.html | 133 ------------ src/test/run-make-fulldeps/coverage/async.rs | 2 +- .../run-make-fulldeps/coverage/if_else.rs | 2 +- .../run-make-fulldeps/coverage/inner_items.rs | 2 +- .../coverage/lib/used_crate.rs | 104 ++++++++++ .../coverage/loop_break_value.rs | 2 +- .../coverage/loops_branches.rs | 2 +- .../coverage/simple_match.rs | 2 +- .../coverage/used_crate/mod.rs | 43 ---- .../run-make-fulldeps/coverage/uses_crate.rs | 8 +- 34 files changed, 1390 insertions(+), 650 deletions(-) rename src/test/run-make-fulldeps/coverage-spanview/{expected_mir_dump.uses_crate/uses_crate.used_crate-unused_private_function.-------.InstrumentCoverage.0.html => expected_mir_dump.used_crate/used_crate.unused_function.-------.InstrumentCoverage.0.html} (95%) create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.unused_generic_function.-------.InstrumentCoverage.0.html rename src/test/run-make-fulldeps/coverage-spanview/{expected_mir_dump.uses_crate/uses_crate.used_crate-unused_function.-------.InstrumentCoverage.0.html => expected_mir_dump.used_crate/used_crate.unused_private_function.-------.InstrumentCoverage.0.html} (53%) create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.use_this_lib_crate.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_from_bin_crate_and_lib_crate_generic_function.-------.InstrumentCoverage.0.html rename src/test/run-make-fulldeps/coverage-spanview/{expected_mir_dump.uses_crate/uses_crate.used_crate-used_function.-------.InstrumentCoverage.0.html => expected_mir_dump.used_crate/used_crate.used_function.-------.InstrumentCoverage.0.html} (91%) create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_only_from_bin_crate_generic_function.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_only_from_this_lib_crate_generic_function.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_with_same_type_from_bin_crate_and_lib_crate_generic_function.-------.InstrumentCoverage.0.html delete mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_generic_function.-------.InstrumentCoverage.0.html delete mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_generic_function.-------.InstrumentCoverage.0.html delete mode 100644 src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_twice_generic_function.-------.InstrumentCoverage.0.html create mode 100644 src/test/run-make-fulldeps/coverage/lib/used_crate.rs delete mode 100644 src/test/run-make-fulldeps/coverage/used_crate/mod.rs diff --git a/src/test/run-make-fulldeps/coverage-reports/Makefile b/src/test/run-make-fulldeps/coverage-reports/Makefile index 91390f6cc02e4..89d5974d73c3b 100644 --- a/src/test/run-make-fulldeps/coverage-reports/Makefile +++ b/src/test/run-make-fulldeps/coverage-reports/Makefile @@ -67,7 +67,7 @@ DEBUG_FLAG=--debug endif ifeq ($(LLVM_VERSION_11_PLUS),true) -all: $(patsubst $(SOURCEDIR)/%.rs,%,$(wildcard $(SOURCEDIR)/*.rs)) +all: $(patsubst $(SOURCEDIR)/lib/%.rs,%,$(wildcard $(SOURCEDIR)/lib/*.rs)) $(patsubst $(SOURCEDIR)/%.rs,%,$(wildcard $(SOURCEDIR)/*.rs)) else $(info Rust option `-Z instrument-coverage` requires LLVM 11 or higher. Test skipped.) all: @@ -84,12 +84,22 @@ endif -include clear_expected_if_blessed +%: $(SOURCEDIR)/lib/%.rs + # Compile the test library with coverage instrumentation + $(RUSTC) $(SOURCEDIR)/lib/$@.rs \ + $$( grep -q '^\/\/ require-rust-edition-2018' $(SOURCEDIR)/lib/$@.rs && \ + echo "--edition=2018" \ + ) \ + --crate-type rlib \ + -Zinstrument-coverage + %: $(SOURCEDIR)/%.rs - # Compile the test program with coverage instrumentation and generate relevant MIR. + # Compile the test program with coverage instrumentation $(RUSTC) $(SOURCEDIR)/$@.rs \ $$( grep -q '^\/\/ require-rust-edition-2018' $(SOURCEDIR)/$@.rs && \ echo "--edition=2018" \ ) \ + -L "$(TMPDIR)" \ -Zinstrument-coverage # Run it in order to generate some profiling data, @@ -142,8 +152,17 @@ else # Compare the show coverage output (`--bless` refreshes `typical` files) # Note `llvm-cov show` output for some programs can vary, but can be ignored # by inserting `// ignore-llvm-cov-show-diffs` at the top of the source file. - - $(DIFF) expected_show_coverage.$@.txt "$(TMPDIR)"/actual_show_coverage.$@.txt || \ + # + # FIXME(richkadel): It looks like most past variations seem to have been mitigated. None of the + # Rust test source samples have the `// ignore-llvm-cov-show-diffs` anymore. The main variation + # I had seen (and is still present in the new `coverage/lib/used_crate.rs`) is the `llvm-cov show` + # reporting of multiple instantiations of a generic function with different type substitutions. + # For some reason, `llvm-cov show` can report these in a non-deterministic order, breaking the + # `diff` comparision. I was able to work around the problem with `diff --ignore-matching-lines=RE` + # to ignore each line prefixing each generic instantiation coverage code region. + + $(DIFF) --ignore-matching-lines='::<.*>.*:$$' \ + expected_show_coverage.$@.txt "$(TMPDIR)"/actual_show_coverage.$@.txt || \ ( grep -q '^\/\/ ignore-llvm-cov-show-diffs' $(SOURCEDIR)/$@.rs && \ >&2 echo 'diff failed, but suppressed with `// ignore-llvm-cov-show-diffs` in $(SOURCEDIR)/$@.rs' \ ) || \ @@ -177,6 +196,10 @@ endif $(call BIN,"$(TMPDIR)"/$@) \ | "$(PYTHON)" $(BASEDIR)/prettify_json.py \ > "$(TMPDIR)"/actual_export_coverage.$@.json + # FIXME(richkadel): With the addition of `--ignore-matching-lines=RE` to ignore the + # non-deterministically-ordered coverage results for multiple instantiations of generics with + # differing type substitutions, I probably don't need the `.json` files anymore (and may not + # need `prettify_json.py` either). ifdef RUSTC_BLESS_TEST cp "$(TMPDIR)"/actual_export_coverage.$@.json expected_export_coverage.$@.json diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json index fc0d7db7c2992..35ddd58fc437a 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json +++ b/src/test/run-make-fulldeps/coverage-reports/expected_export_coverage.uses_crate.json @@ -3,53 +3,53 @@ { "files": [ { - "filename": "../coverage/used_crate/mod.rs", + "filename": "../coverage/lib/used_crate.rs", "summary": { "functions": { - "count": 3, - "covered": 3, - "percent": 100 + "count": 6, + "covered": 5, + "percent": 83.33333333333334 }, "instantiations": { - "count": 4, - "covered": 4, - "percent": 100 + "count": 10, + "covered": 8, + "percent": 80 }, "lines": { - "count": 31, - "covered": 14, - "percent": 45.16129032258064 + "count": 46, + "covered": 26, + "percent": 56.52173913043478 }, "regions": { - "count": 16, - "covered": 6, - "notcovered": 10, - "percent": 37.5 + "count": 19, + "covered": 8, + "notcovered": 11, + "percent": 42.10526315789473 } } } ], "totals": { "functions": { - "count": 3, - "covered": 3, - "percent": 100 + "count": 6, + "covered": 5, + "percent": 83.33333333333334 }, "instantiations": { - "count": 4, - "covered": 4, - "percent": 100 + "count": 10, + "covered": 8, + "percent": 80 }, "lines": { - "count": 31, - "covered": 14, - "percent": 45.16129032258064 + "count": 46, + "covered": 26, + "percent": 56.52173913043478 }, "regions": { - "count": 16, - "covered": 6, - "notcovered": 10, - "percent": 37.5 + "count": 19, + "covered": 8, + "notcovered": 11, + "percent": 42.10526315789473 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.async.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.async.txt index 5c9dc0d22b548..824bddaa40155 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.async.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.async.txt @@ -1,4 +1,4 @@ - 1| |#![allow(unused_assignments)] + 1| |#![allow(unused_assignments, dead_code)] 2| | 3| |// require-rust-edition-2018 4| | diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.if_else.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.if_else.txt index 77113ada103e4..4285d31868689 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.if_else.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.if_else.txt @@ -1,4 +1,4 @@ - 1| |#![allow(unused_assignments)] + 1| |#![allow(unused_assignments, unused_variables)] 2| | 3| 1|fn main() { 4| 1| // Initialize test constants in a way that cannot be determined at compile time, to ensure diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.inner_items.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.inner_items.txt index db2a19ac4bf71..f5b5184044f65 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.inner_items.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.inner_items.txt @@ -1,4 +1,4 @@ - 1| |#![allow(unused_assignments, unused_variables)] + 1| |#![allow(unused_assignments, unused_variables, dead_code)] 2| | 3| 1|fn main() { 4| | // Initialize test constants in a way that cannot be determined at compile time, to ensure diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loop_break_value.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loop_break_value.txt index b0d668c6d76da..022fe4c596207 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loop_break_value.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loop_break_value.txt @@ -1,4 +1,4 @@ - 1| |#![allow(unused_assignments)] + 1| |#![allow(unused_assignments, unused_variables)] 2| | 3| 1|fn main() { 4| 1| let result diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loops_branches.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loops_branches.txt index 135b7b67034f6..474f02b700734 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loops_branches.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.loops_branches.txt @@ -1,4 +1,4 @@ - 1| |#![allow(unused_assignments)] + 1| |#![allow(unused_assignments, unused_variables, while_true)] 2| | 3| |// This test confirms an earlier problem was resolved, supporting the MIR graph generated by the 4| |// structure of this `fmt` function. diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.simple_match.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.simple_match.txt index 336853b96f34a..81b4c090a46c0 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.simple_match.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.simple_match.txt @@ -1,4 +1,4 @@ - 1| |#![allow(unused_assignments)] + 1| |#![allow(unused_assignments, unused_variables)] 2| | 3| 1|fn main() { 4| 1| // Initialize test constants in a way that cannot be determined at compile time, to ensure diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt index ad1bdb5d6a54a..e14e733fff6d4 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.uses_crate.txt @@ -12,45 +12,131 @@ 12| 1| countdown = 10; 13| 1| } ^0 - 14| 1| used_twice_generic_function("some str"); + 14| 1| use_this_lib_crate(); 15| 1|} 16| | - 17| 1|pub fn used_generic_function(arg: T) { - 18| 1| println!("used_generic_function with {:?}", arg); - 19| 1|} + 17| 2|pub fn used_only_from_bin_crate_generic_function(arg: T) { + 18| 2| println!("used_only_from_bin_crate_generic_function with {:?}", arg); + 19| 2|} + ------------------ + | used_crate::used_only_from_bin_crate_generic_function::<&str>: + | 17| 1|pub fn used_only_from_bin_crate_generic_function(arg: T) { + | 18| 1| println!("used_only_from_bin_crate_generic_function with {:?}", arg); + | 19| 1|} + ------------------ + | used_crate::used_only_from_bin_crate_generic_function::<&alloc::vec::Vec>: + | 17| 1|pub fn used_only_from_bin_crate_generic_function(arg: T) { + | 18| 1| println!("used_only_from_bin_crate_generic_function with {:?}", arg); + | 19| 1|} + ------------------ 20| | - 21| 2|pub fn used_twice_generic_function(arg: T) { - 22| 2| println!("used_twice_generic_function with {:?}", arg); + 21| 2|pub fn used_only_from_this_lib_crate_generic_function(arg: T) { + 22| 2| println!("used_only_from_this_lib_crate_generic_function with {:?}", arg); 23| 2|} ------------------ - | uses_crate::used_crate::used_twice_generic_function::>: - | 21| 1|pub fn used_twice_generic_function(arg: T) { - | 22| 1| println!("used_twice_generic_function with {:?}", arg); + | used_crate::used_only_from_this_lib_crate_generic_function::>: + | 21| 1|pub fn used_only_from_this_lib_crate_generic_function(arg: T) { + | 22| 1| println!("used_only_from_this_lib_crate_generic_function with {:?}", arg); | 23| 1|} ------------------ - | uses_crate::used_crate::used_twice_generic_function::<&str>: - | 21| 1|pub fn used_twice_generic_function(arg: T) { - | 22| 1| println!("used_twice_generic_function with {:?}", arg); + | used_crate::used_only_from_this_lib_crate_generic_function::<&str>: + | 21| 1|pub fn used_only_from_this_lib_crate_generic_function(arg: T) { + | 22| 1| println!("used_only_from_this_lib_crate_generic_function with {:?}", arg); | 23| 1|} ------------------ 24| | - 25| 0|pub fn unused_generic_function(arg: T) { - 26| 0| println!("unused_generic_function with {:?}", arg); - 27| 0|} + 25| 2|pub fn used_from_bin_crate_and_lib_crate_generic_function(arg: T) { + 26| 2| println!("used_from_bin_crate_and_lib_crate_generic_function with {:?}", arg); + 27| 2|} + ------------------ + | used_crate::used_from_bin_crate_and_lib_crate_generic_function::>: + | 25| 1|pub fn used_from_bin_crate_and_lib_crate_generic_function(arg: T) { + | 26| 1| println!("used_from_bin_crate_and_lib_crate_generic_function with {:?}", arg); + | 27| 1|} + ------------------ + | used_crate::used_from_bin_crate_and_lib_crate_generic_function::<&str>: + | 25| 1|pub fn used_from_bin_crate_and_lib_crate_generic_function(arg: T) { + | 26| 1| println!("used_from_bin_crate_and_lib_crate_generic_function with {:?}", arg); + | 27| 1|} + ------------------ 28| | - 29| 0|pub fn unused_function() { - 30| 0| let is_true = std::env::args().len() == 1; - 31| 0| let mut countdown = 2; - 32| 0| if !is_true { - 33| 0| countdown = 20; - 34| 0| } + 29| 2|pub fn used_with_same_type_from_bin_crate_and_lib_crate_generic_function(arg: T) { + 30| 2| println!("used_with_same_type_from_bin_crate_and_lib_crate_generic_function with {:?}", arg); + 31| 2|} + 32| | + 33| 0|pub fn unused_generic_function(arg: T) { + 34| 0| println!("unused_generic_function with {:?}", arg); 35| 0|} 36| | - 37| 0|fn unused_private_function() { + 37| 0|pub fn unused_function() { 38| 0| let is_true = std::env::args().len() == 1; 39| 0| let mut countdown = 2; 40| 0| if !is_true { 41| 0| countdown = 20; 42| 0| } 43| 0|} + 44| | + 45| 0|fn unused_private_function() { + 46| 0| let is_true = std::env::args().len() == 1; + 47| 0| let mut countdown = 2; + 48| 0| if !is_true { + 49| 0| countdown = 20; + 50| 0| } + 51| 0|} + 52| | + 53| 1|fn use_this_lib_crate() { + 54| 1| used_from_bin_crate_and_lib_crate_generic_function("used from library used_crate.rs"); + 55| 1| used_with_same_type_from_bin_crate_and_lib_crate_generic_function( + 56| 1| "used from library used_crate.rs", + 57| 1| ); + 58| 1| let some_vec = vec![5, 6, 7, 8]; + 59| 1| used_only_from_this_lib_crate_generic_function(some_vec); + 60| 1| used_only_from_this_lib_crate_generic_function("used ONLY from library used_crate.rs"); + 61| 1|} + ------------------ + | Unexecuted instantiation: used_crate::use_this_lib_crate + ------------------ + 62| | + 63| |// FIXME(#79651): `used_from_bin_crate_and_lib_crate_generic_function()` is covered and executed + 64| |// `2` times, but the coverage output also shows (at the bottom of the coverage report): + 65| |// ------------------ + 66| |// | Unexecuted instantiation: + 67| |// ------------------ + 68| |// + 69| |// Note, the function name shown in the error seems to change depending on the structure of the + 70| |// code, for some reason, including: + 71| |// + 72| |// * used_crate::used_from_bin_crate_and_lib_crate_generic_function::<&str> + 73| |// * used_crate::use_this_lib_crate + 74| |// + 75| |// The `Unexecuted instantiation` error may be related to more than one generic function. Since the + 76| |// reporting is not consistent, it may not be obvious if there are multiple problems here; however, + 77| |// `used_crate::used_from_bin_crate_and_lib_crate_generic_function::<&str>` (which I have seen + 78| |// with this error) is the only generic function missing instantiaion coverage counts. + 79| |// + 80| |// The `&str` variant was called from within this `lib` crate, and the `bin` crate also calls this + 81| |// function, but with `T` type `&Vec`. + 82| |// + 83| |// I believe the reason is that one or both crates are generating `Zero` counters for what it + 84| |// believes are "Unreachable" instantiations, but those instantiations are counted from the + 85| |// coverage map in the other crate. + 86| |// + 87| |// See `add_unreachable_coverage()` in `mapgen.rs` for more on how these `Zero` counters are added + 88| |// for what the funciton believes are `DefId`s that did not get codegenned. I suspect the issue + 89| |// may be related to this process, but this needs to be confirmed. It may not be possible to know + 90| |// for sure if a function is truly unused and should be reported with `Zero` coverage if it may + 91| |// still get used from an external crate. (Something to look at: If the `DefId` in MIR corresponds + 92| |// _only_ to the generic function without type parameters, is the `DefId` in the codegenned set, + 93| |// instantiated with one of the type parameters (in either or both crates) a *different* `DefId`? + 94| |// If so, `add_unreachable_coverage()` would assume the MIR `DefId` was uncovered, and would add + 95| |// unreachable coverage. + 96| |// + 97| |// I didn't think they could be different, but if they can, we would need to find the `DefId` for + 98| |// the generic function MIR and include it in the set of "codegenned" DefIds if any instantiation + 99| |// of that generic function does exist. + 100| |// + 101| |// Note, however, for `used_with_same_type_from_bin_crate_and_lib_crate_generic_function()` both + 102| |// crates use this function with the same type variant. The function does not have multiple + 103| |// instantiations, so the coverage analysis is not confused. No "Unexecuted instantiations" errors + 104| |// are reported. diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.async.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.async.txt index 2fac0fea84b19..82a4457b6ef1e 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.async.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.async.txt @@ -28,16 +28,18 @@ Counter in file 0 79:14 -> 79:16, 0 Counter in file 0 81:1 -> 81:2, 0 Counter in file 0 91:25 -> 91:34, 0 Counter in file 0 5:1 -> 5:25, #1 -Counter in file 0 5:25 -> 6:14, #1 -Counter in file 0 7:9 -> 7:10, #2 -Counter in file 0 9:9 -> 9:10, (#1 - #2) -Counter in file 0 11:1 -> 11:2, (#2 + (#1 - #2)) Counter in file 0 21:1 -> 21:23, #1 +Counter in file 0 17:20 -> 17:21, #1 Counter in file 0 67:5 -> 67:23, #1 Counter in file 0 38:1 -> 38:19, #1 +Counter in file 0 13:20 -> 13:21, #1 Counter in file 0 29:1 -> 29:22, #1 Counter in file 0 93:1 -> 101:2, #1 Counter in file 0 91:1 -> 91:25, #1 +Counter in file 0 5:25 -> 6:14, #1 +Counter in file 0 7:9 -> 7:10, #2 +Counter in file 0 9:9 -> 9:10, (#1 - #2) +Counter in file 0 11:1 -> 11:2, (#2 + (#1 - #2)) Counter in file 0 38:19 -> 42:12, #1 Counter in file 0 43:9 -> 43:10, #3 Counter in file 0 43:14 -> 43:18, (#1 + 0) @@ -53,7 +55,6 @@ Counter in file 0 51:5 -> 52:18, #1 Counter in file 0 53:13 -> 53:14, #2 Counter in file 0 63:13 -> 63:14, (#1 - #2) Counter in file 0 65:5 -> 65:6, (#2 + (#1 - #2)) -Counter in file 0 17:20 -> 17:21, #1 Counter in file 0 49:1 -> 68:12, #1 Counter in file 0 69:9 -> 69:10, #2 Counter in file 0 69:14 -> 69:27, (#1 + 0) @@ -69,7 +70,6 @@ Counter in file 0 86:14 -> 86:16, #2 Counter in file 0 87:14 -> 87:16, #3 Counter in file 0 89:1 -> 89:2, (#3 + (#2 + (#1 - (#3 + #2)))) Counter in file 0 17:1 -> 17:20, #1 -Counter in file 0 13:20 -> 13:21, #1 Counter in file 0 66:5 -> 66:23, #1 Counter in file 0 17:9 -> 17:10, #1 Counter in file 0 17:9 -> 17:10, #1 diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt index e8be1e685e652..b0319cd9e1896 100644 --- a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage_counters.uses_crate.txt @@ -1,39 +1,48 @@ Counter in file 0 17:1 -> 19:2, #1 -Counter in file 0 25:1 -> 27:2, 0 -Counter in file 0 29:1 -> 32:16, 0 -Counter in file 0 32:17 -> 34:6, 0 -Counter in file 0 34:6 -> 34:7, 0 -Counter in file 0 35:1 -> 35:2, 0 -Counter in file 0 37:1 -> 40:16, 0 -Counter in file 0 40:17 -> 42:6, 0 -Counter in file 0 42:6 -> 42:7, 0 -Counter in file 0 43:1 -> 43:2, 0 +Counter in file 0 25:1 -> 27:2, #1 +Counter in file 0 17:1 -> 19:2, #1 +Counter in file 0 5:1 -> 12:2, #1 +Counter in file 0 17:1 -> 19:2, 0 +Counter in file 0 33:1 -> 35:2, 0 +Counter in file 0 45:1 -> 48:16, 0 +Counter in file 0 48:17 -> 50:6, 0 +Counter in file 0 50:6 -> 50:7, 0 +Counter in file 0 51:1 -> 51:2, 0 +Counter in file 0 53:1 -> 61:2, #1 +Counter in file 0 25:1 -> 27:2, #1 +Counter in file 0 29:1 -> 31:2, #1 +Counter in file 0 21:1 -> 23:2, #1 Counter in file 0 5:1 -> 5:24, #1 Counter in file 0 9:9 -> 11:15, (#1 + 0) Counter in file 0 11:16 -> 13:6, #2 Counter in file 0 13:6 -> 13:7, (#1 - #2) Counter in file 0 14:5 -> 15:2, (#2 + (#1 - #2)) Counter in file 0 21:1 -> 23:2, #1 -Counter in file 0 21:1 -> 23:2, #1 -Counter in file 0 5:1 -> 10:2, #1 -Emitting segments for file: ../coverage/used_crate/mod.rs +Counter in file 0 37:1 -> 40:16, #1 +Counter in file 0 40:17 -> 42:6, #2 +Counter in file 0 42:6 -> 42:7, (#1 - #2) +Counter in file 0 43:1 -> 43:2, (#2 + (#1 - #2)) +Emitting segments for file: ../coverage/lib/used_crate.rs Combined regions: 5:1 -> 5:24 (count=1) 9:9 -> 11:15 (count=1) 11:16 -> 13:6 (count=1) 13:6 -> 13:7 (count=0) 14:5 -> 15:2 (count=1) - 17:1 -> 19:2 (count=1) + 17:1 -> 19:2 (count=2) 21:1 -> 23:2 (count=2) - 25:1 -> 27:2 (count=0) - 29:1 -> 32:16 (count=0) - 32:17 -> 34:6 (count=0) - 34:6 -> 34:7 (count=0) - 35:1 -> 35:2 (count=0) + 25:1 -> 27:2 (count=2) + 29:1 -> 31:2 (count=2) + 33:1 -> 35:2 (count=0) 37:1 -> 40:16 (count=0) 40:17 -> 42:6 (count=0) 42:6 -> 42:7 (count=0) 43:1 -> 43:2 (count=0) + 45:1 -> 48:16 (count=0) + 48:17 -> 50:6 (count=0) + 50:6 -> 50:7 (count=0) + 51:1 -> 51:2 (count=0) + 53:1 -> 61:2 (count=1) Segment at 5:1 (count = 1), RegionEntry Segment at 5:24 (count = 0), Skipped Segment at 9:9 (count = 1), RegionEntry @@ -43,18 +52,15 @@ Segment at 13:6 (count = 0), RegionEntry Segment at 13:7 (count = 0), Skipped Segment at 14:5 (count = 1), RegionEntry Segment at 15:2 (count = 0), Skipped -Segment at 17:1 (count = 1), RegionEntry +Segment at 17:1 (count = 2), RegionEntry Segment at 19:2 (count = 0), Skipped Segment at 21:1 (count = 2), RegionEntry Segment at 23:2 (count = 0), Skipped -Segment at 25:1 (count = 0), RegionEntry +Segment at 25:1 (count = 2), RegionEntry Segment at 27:2 (count = 0), Skipped -Segment at 29:1 (count = 0), RegionEntry -Segment at 32:16 (count = 0), Skipped -Segment at 32:17 (count = 0), RegionEntry -Segment at 34:6 (count = 0), RegionEntry -Segment at 34:7 (count = 0), Skipped -Segment at 35:1 (count = 0), RegionEntry +Segment at 29:1 (count = 2), RegionEntry +Segment at 31:2 (count = 0), Skipped +Segment at 33:1 (count = 0), RegionEntry Segment at 35:2 (count = 0), Skipped Segment at 37:1 (count = 0), RegionEntry Segment at 40:16 (count = 0), Skipped @@ -63,13 +69,42 @@ Segment at 42:6 (count = 0), RegionEntry Segment at 42:7 (count = 0), Skipped Segment at 43:1 (count = 0), RegionEntry Segment at 43:2 (count = 0), Skipped -Emitting segments for function: _RINvNtCs4fqI2P2rA04_10uses_crate10used_crate27used_twice_generic_functionINtNtCs3QflaznQylx_5alloc3vec3VeclEEB4_ +Segment at 45:1 (count = 0), RegionEntry +Segment at 48:16 (count = 0), Skipped +Segment at 48:17 (count = 0), RegionEntry +Segment at 50:6 (count = 0), RegionEntry +Segment at 50:7 (count = 0), Skipped +Segment at 51:1 (count = 0), RegionEntry +Segment at 51:2 (count = 0), Skipped +Segment at 53:1 (count = 1), RegionEntry +Segment at 61:2 (count = 0), Skipped +Emitting segments for function: _RINvCsbDqzXfLQacH_10used_crate41used_only_from_bin_crate_generic_functionReECs4fqI2P2rA04_10uses_crate +Combined regions: + 17:1 -> 19:2 (count=1) +Segment at 17:1 (count = 1), RegionEntry +Segment at 19:2 (count = 0), Skipped +Emitting segments for function: _RINvCsbDqzXfLQacH_10used_crate41used_only_from_bin_crate_generic_functionRINtNtCs3QflaznQylx_5alloc3vec3VeclEECs4fqI2P2rA04_10uses_crate +Combined regions: + 17:1 -> 19:2 (count=1) +Segment at 17:1 (count = 1), RegionEntry +Segment at 19:2 (count = 0), Skipped +Emitting segments for function: _RINvCsbDqzXfLQacH_10used_crate46used_only_from_this_lib_crate_generic_functionINtNtCs3QflaznQylx_5alloc3vec3VeclEEB2_ Combined regions: 21:1 -> 23:2 (count=1) Segment at 21:1 (count = 1), RegionEntry Segment at 23:2 (count = 0), Skipped -Emitting segments for function: _RINvNtCs4fqI2P2rA04_10uses_crate10used_crate27used_twice_generic_functionReEB4_ +Emitting segments for function: _RINvCsbDqzXfLQacH_10used_crate46used_only_from_this_lib_crate_generic_functionReEB2_ Combined regions: 21:1 -> 23:2 (count=1) Segment at 21:1 (count = 1), RegionEntry Segment at 23:2 (count = 0), Skipped +Emitting segments for function: _RINvCsbDqzXfLQacH_10used_crate50used_from_bin_crate_and_lib_crate_generic_functionINtNtCs3QflaznQylx_5alloc3vec3VeclEECs4fqI2P2rA04_10uses_crate +Combined regions: + 25:1 -> 27:2 (count=1) +Segment at 25:1 (count = 1), RegionEntry +Segment at 27:2 (count = 0), Skipped +Emitting segments for function: _RINvCsbDqzXfLQacH_10used_crate50used_from_bin_crate_and_lib_crate_generic_functionReEB2_ +Combined regions: + 25:1 -> 27:2 (count=1) +Segment at 25:1 (count = 1), RegionEntry +Segment at 27:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-spanview/Makefile b/src/test/run-make-fulldeps/coverage-spanview/Makefile index f414fe89eb945..84b5d0e522f8c 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/Makefile +++ b/src/test/run-make-fulldeps/coverage-spanview/Makefile @@ -21,7 +21,7 @@ endef export SPANVIEW_HEADER ifeq ($(LLVM_VERSION_11_PLUS),true) -all: $(patsubst $(SOURCEDIR)/%.rs,%,$(wildcard $(SOURCEDIR)/*.rs)) +all: $(patsubst $(SOURCEDIR)/lib/%.rs,%,$(wildcard $(SOURCEDIR)/lib/*.rs)) $(patsubst $(SOURCEDIR)/%.rs,%,$(wildcard $(SOURCEDIR)/*.rs)) else $(info Rust option `-Z instrument-coverage` requires LLVM 11 or higher. Test skipped.) all: @@ -36,12 +36,47 @@ endif -include clear_expected_if_blessed +# FIXME(richkadel): The actions for these two types of targets (libraries and binaries) should be +# combined. + +%: $(SOURCEDIR)/lib/%.rs + # Compile the test library with coverage instrumentation + $(RUSTC) $(SOURCEDIR)/lib/$@.rs \ + $$( grep -q '^\/\/ require-rust-edition-2018' $(SOURCEDIR)/lib/$@.rs && \ + echo "--edition=2018" \ + ) \ + --crate-type rlib \ + -Zinstrument-coverage \ + -Zdump-mir=InstrumentCoverage \ + -Zdump-mir-spanview \ + -Zdump-mir-dir="$(TMPDIR)"/mir_dump.$@ + + for path in "$(TMPDIR)"/mir_dump.$@/*; do \ + file="$$(basename "$$path")"; \ + urlescaped="$$("$(PYTHON)" $(BASEDIR)/escape_url.py $$file)" || exit $$?; \ + printf "$$SPANVIEW_HEADER\n" "$@" "$$urlescaped" > "$$path".modified; \ + tail -n +2 "$$path" >> "$$path".modified; \ + mv "$$path".modified "$$path"; \ + done && true # for/done ends in non-zero status + +ifdef RUSTC_BLESS_TEST + mkdir -p expected_mir_dump.$@ + cp "$(TMPDIR)"/mir_dump.$@/*InstrumentCoverage.0.html expected_mir_dump.$@/ +else + # Check that the selected `mir_dump` files match what we expect (`--bless` refreshes `expected`) + mkdir -p "$(TMPDIR)"/actual_mir_dump.$@ + rm -f "$(TMPDIR)"/actual_mir_dump.$@/* + cp "$(TMPDIR)"/mir_dump.$@/*InstrumentCoverage.0.html "$(TMPDIR)"/actual_mir_dump.$@/ + $(DIFF) -r expected_mir_dump.$@/ "$(TMPDIR)"/actual_mir_dump.$@/ +endif + %: $(SOURCEDIR)/%.rs - # Compile the test program with coverage instrumentation and generate relevant MIR. + # Compile the test program with coverage instrumentation $(RUSTC) $(SOURCEDIR)/$@.rs \ $$( grep -q '^\/\/ require-rust-edition-2018' $(SOURCEDIR)/$@.rs && \ echo "--edition=2018" \ ) \ + -L "$(TMPDIR)" \ -Zinstrument-coverage \ -Zdump-mir=InstrumentCoverage \ -Zdump-mir-spanview \ diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_private_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.unused_function.-------.InstrumentCoverage.0.html similarity index 95% rename from src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_private_function.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.unused_function.-------.InstrumentCoverage.0.html index 10e71152c5343..47fe96eebd19f 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_private_function.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.unused_function.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -uses_crate.used_crate-unused_private_function - Coverage Spans +used_crate.unused_function - Coverage Spans + + +
@0,1,2,3,4⦊pub fn unused_generic_function<T: Debug>(arg: T) { + println!("unused_generic_function with {:?}", arg); +}⦉@0,1,2,3,4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.unused_private_function.-------.InstrumentCoverage.0.html similarity index 53% rename from src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_function.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.unused_private_function.-------.InstrumentCoverage.0.html index 42ba0458349ff..361c57930229a 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_function.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.unused_private_function.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -uses_crate.used_crate-unused_function - Coverage Spans +used_crate.unused_private_function - Coverage Spans -
@0,1,2,3⦊pub fn unused_function() { - let is_true = std::env::args().len() == 1; - let mut countdown = 2; - if !is_true⦉@0,1,2,3 @4,6⦊{ - countdown = 20; - }⦉@4,6@5⦊⦉@5 -}@7⦊⦉@7
+
@0,1,2,3⦊fn unused_private_function() { + let is_true = std::env::args().len() == 1; + let mut countdown = 2; + if !is_true⦉@0,1,2,3 @4,6⦊{ + countdown = 20; + }⦉@4,6@5⦊⦉@5 +}@7⦊⦉@7
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.use_this_lib_crate.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.use_this_lib_crate.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..bed5e7bb7ce88 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.use_this_lib_crate.-------.InstrumentCoverage.0.html @@ -0,0 +1,190 @@ + + + + +used_crate.use_this_lib_crate - Coverage Spans + + + +
@0,1,2,3,4,5,6,7,8⦊fn use_this_lib_crate() { + used_from_bin_crate_and_lib_crate_generic_function("used from library used_crate.rs"); + used_with_same_type_from_bin_crate_and_lib_crate_generic_function( + "used from library used_crate.rs", + ); + let some_vec = vec![5, 6, 7, 8]; + used_only_from_this_lib_crate_generic_function(some_vec); + used_only_from_this_lib_crate_generic_function("used ONLY from library used_crate.rs"); +}⦉@0,1,2,3,4,5,6,7,8
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_from_bin_crate_and_lib_crate_generic_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_from_bin_crate_and_lib_crate_generic_function.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..8b994a6962b83 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_from_bin_crate_and_lib_crate_generic_function.-------.InstrumentCoverage.0.html @@ -0,0 +1,133 @@ + + + + +used_crate.used_from_bin_crate_and_lib_crate_generic_function - Coverage Spans + + + +
@0,1,2,3,4⦊pub fn used_from_bin_crate_and_lib_crate_generic_function<T: Debug>(arg: T) { + println!("used_from_bin_crate_and_lib_crate_generic_function with {:?}", arg); +}⦉@0,1,2,3,4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_function.-------.InstrumentCoverage.0.html similarity index 91% rename from src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_function.-------.InstrumentCoverage.0.html rename to src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_function.-------.InstrumentCoverage.0.html index 15dce97e742b0..2ffd9bfb82386 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_function.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_function.-------.InstrumentCoverage.0.html @@ -2,7 +2,7 @@ -uses_crate.used_crate-used_function - Coverage Spans +used_crate.used_function - Coverage Spans + + +
@0,1,2,3,4⦊pub fn used_only_from_bin_crate_generic_function<T: Debug>(arg: T) { + println!("used_only_from_bin_crate_generic_function with {:?}", arg); +}⦉@0,1,2,3,4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_only_from_this_lib_crate_generic_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_only_from_this_lib_crate_generic_function.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..76bc057dd00a9 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_only_from_this_lib_crate_generic_function.-------.InstrumentCoverage.0.html @@ -0,0 +1,133 @@ + + + + +used_crate.used_only_from_this_lib_crate_generic_function - Coverage Spans + + + +
@0,1,2,3,4⦊pub fn used_only_from_this_lib_crate_generic_function<T: Debug>(arg: T) { + println!("used_only_from_this_lib_crate_generic_function with {:?}", arg); +}⦉@0,1,2,3,4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_with_same_type_from_bin_crate_and_lib_crate_generic_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_with_same_type_from_bin_crate_and_lib_crate_generic_function.-------.InstrumentCoverage.0.html new file mode 100644 index 0000000000000..a2f4b7e19ebdd --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.used_crate/used_crate.used_with_same_type_from_bin_crate_and_lib_crate_generic_function.-------.InstrumentCoverage.0.html @@ -0,0 +1,133 @@ + + + + +used_crate.used_with_same_type_from_bin_crate_and_lib_crate_generic_function - Coverage Spans + + + +
@0,1,2,3,4⦊pub fn used_with_same_type_from_bin_crate_and_lib_crate_generic_function<T: Debug>(arg: T) { + println!("used_with_same_type_from_bin_crate_and_lib_crate_generic_function with {:?}", arg); +}⦉@0,1,2,3,4
+ + diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.main.-------.InstrumentCoverage.0.html index 52c99558de6c5..acb2c7d63f51b 100644 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.main.-------.InstrumentCoverage.0.html @@ -69,83 +69,125 @@ -
@0,1,2,3,4,5,6,7⦊fn main() { -@0,1,2,3,4,5,6,7,8,9⦊fn main() { + used_crate::used_function(); - used_crate::used_function(); + let some_vec = vec![1, 2, 3, 4]; - let some_vec = vec![1, 2, 3, 4]; + used_crate::used_generic_function(&some_vec); - used_crate::used_only_from_bin_crate_generic_function(&some_vec); + used_crate::used_twice_generic_function(some_vec); - used_crate::used_only_from_bin_crate_generic_function("used from bin uses_crate.rs"); +}⦉@0,1,2,3,4,5,6,7
+8:59-8:68: @4[4]: _7 = &_2 +8:5-8:69: @4.Call: _6 = used_only_from_bin_crate_generic_function::<&Vec<i32>>(move _7) -> [return: bb5, unwind: bb11] +9:5-9:89: @5.Call: _8 = used_only_from_bin_crate_generic_function::<&str>(const "used from bin uses_crate.rs") -> [return: bb6, unwind: bb11] +10:68-10:76: @6[3]: _10 = move _2 +10:5-10:77: @6.Call: _9 = used_from_bin_crate_and_lib_crate_generic_function::<Vec<i32>>(move _10) -> [return: bb7, unwind: bb10] +11:5-11:98: @7.Call: _11 = used_with_same_type_from_bin_crate_and_lib_crate_generic_function::<&str>(const "interesting?") -> [return: bb8, unwind: bb11] +5:11-12:2: @8[1]: _0 = const () +12:2-12:2: @9.Return: return"> used_crate::used_from_bin_crate_and_lib_crate_generic_function(some_vec); + used_crate::used_with_same_type_from_bin_crate_and_lib_crate_generic_function("interesting?"); +}⦉@0,1,2,3,4,5,6,7,8,9
diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_generic_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_generic_function.-------.InstrumentCoverage.0.html deleted file mode 100644 index d89963a32ce6c..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-unused_generic_function.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - -uses_crate.used_crate-unused_generic_function - Coverage Spans - - - -
@0,1,2,3,4⦊pub fn unused_generic_function<T: Debug>(arg: T) { - println!("unused_generic_function with {:?}", arg); -}⦉@0,1,2,3,4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_generic_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_generic_function.-------.InstrumentCoverage.0.html deleted file mode 100644 index e47ed0b381786..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_generic_function.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - -uses_crate.used_crate-used_generic_function - Coverage Spans - - - -
@0,1,2,3,4⦊pub fn used_generic_function<T: Debug>(arg: T) { - println!("used_generic_function with {:?}", arg); -}⦉@0,1,2,3,4
- - diff --git a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_twice_generic_function.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_twice_generic_function.-------.InstrumentCoverage.0.html deleted file mode 100644 index ef63db45cc07b..0000000000000 --- a/src/test/run-make-fulldeps/coverage-spanview/expected_mir_dump.uses_crate/uses_crate.used_crate-used_twice_generic_function.-------.InstrumentCoverage.0.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - -uses_crate.used_crate-used_twice_generic_function - Coverage Spans - - - -
@0,1,2,3,4⦊pub fn used_twice_generic_function<T: Debug>(arg: T) { - println!("used_twice_generic_function with {:?}", arg); -}⦉@0,1,2,3,4
- - diff --git a/src/test/run-make-fulldeps/coverage/async.rs b/src/test/run-make-fulldeps/coverage/async.rs index 491d274654387..5553af92465ca 100644 --- a/src/test/run-make-fulldeps/coverage/async.rs +++ b/src/test/run-make-fulldeps/coverage/async.rs @@ -1,4 +1,4 @@ -#![allow(unused_assignments)] +#![allow(unused_assignments, dead_code)] // require-rust-edition-2018 diff --git a/src/test/run-make-fulldeps/coverage/if_else.rs b/src/test/run-make-fulldeps/coverage/if_else.rs index 3ae4b7a7316bd..3244e1e3afd2b 100644 --- a/src/test/run-make-fulldeps/coverage/if_else.rs +++ b/src/test/run-make-fulldeps/coverage/if_else.rs @@ -1,4 +1,4 @@ -#![allow(unused_assignments)] +#![allow(unused_assignments, unused_variables)] fn main() { // Initialize test constants in a way that cannot be determined at compile time, to ensure diff --git a/src/test/run-make-fulldeps/coverage/inner_items.rs b/src/test/run-make-fulldeps/coverage/inner_items.rs index 66e76513e2692..bcb62b3031cd9 100644 --- a/src/test/run-make-fulldeps/coverage/inner_items.rs +++ b/src/test/run-make-fulldeps/coverage/inner_items.rs @@ -1,4 +1,4 @@ -#![allow(unused_assignments, unused_variables)] +#![allow(unused_assignments, unused_variables, dead_code)] fn main() { // Initialize test constants in a way that cannot be determined at compile time, to ensure diff --git a/src/test/run-make-fulldeps/coverage/lib/used_crate.rs b/src/test/run-make-fulldeps/coverage/lib/used_crate.rs new file mode 100644 index 0000000000000..e5555f9193576 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage/lib/used_crate.rs @@ -0,0 +1,104 @@ +#![allow(unused_assignments, unused_variables)] + +use std::fmt::Debug; + +pub fn used_function() { + // Initialize test constants in a way that cannot be determined at compile time, to ensure + // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from + // dependent conditions. + let is_true = std::env::args().len() == 1; + let mut countdown = 0; + if is_true { + countdown = 10; + } + use_this_lib_crate(); +} + +pub fn used_only_from_bin_crate_generic_function(arg: T) { + println!("used_only_from_bin_crate_generic_function with {:?}", arg); +} + +pub fn used_only_from_this_lib_crate_generic_function(arg: T) { + println!("used_only_from_this_lib_crate_generic_function with {:?}", arg); +} + +pub fn used_from_bin_crate_and_lib_crate_generic_function(arg: T) { + println!("used_from_bin_crate_and_lib_crate_generic_function with {:?}", arg); +} + +pub fn used_with_same_type_from_bin_crate_and_lib_crate_generic_function(arg: T) { + println!("used_with_same_type_from_bin_crate_and_lib_crate_generic_function with {:?}", arg); +} + +pub fn unused_generic_function(arg: T) { + println!("unused_generic_function with {:?}", arg); +} + +pub fn unused_function() { + let is_true = std::env::args().len() == 1; + let mut countdown = 2; + if !is_true { + countdown = 20; + } +} + +fn unused_private_function() { + let is_true = std::env::args().len() == 1; + let mut countdown = 2; + if !is_true { + countdown = 20; + } +} + +fn use_this_lib_crate() { + used_from_bin_crate_and_lib_crate_generic_function("used from library used_crate.rs"); + used_with_same_type_from_bin_crate_and_lib_crate_generic_function( + "used from library used_crate.rs", + ); + let some_vec = vec![5, 6, 7, 8]; + used_only_from_this_lib_crate_generic_function(some_vec); + used_only_from_this_lib_crate_generic_function("used ONLY from library used_crate.rs"); +} + +// FIXME(#79651): `used_from_bin_crate_and_lib_crate_generic_function()` is covered and executed +// `2` times, but the coverage output also shows (at the bottom of the coverage report): +// ------------------ +// | Unexecuted instantiation: +// ------------------ +// +// Note, the function name shown in the error seems to change depending on the structure of the +// code, for some reason, including: +// +// * used_crate::used_from_bin_crate_and_lib_crate_generic_function::<&str> +// * used_crate::use_this_lib_crate +// +// The `Unexecuted instantiation` error may be related to more than one generic function. Since the +// reporting is not consistent, it may not be obvious if there are multiple problems here; however, +// `used_crate::used_from_bin_crate_and_lib_crate_generic_function::<&str>` (which I have seen +// with this error) is the only generic function missing instantiaion coverage counts. +// +// The `&str` variant was called from within this `lib` crate, and the `bin` crate also calls this +// function, but with `T` type `&Vec`. +// +// I believe the reason is that one or both crates are generating `Zero` counters for what it +// believes are "Unreachable" instantiations, but those instantiations are counted from the +// coverage map in the other crate. +// +// See `add_unreachable_coverage()` in `mapgen.rs` for more on how these `Zero` counters are added +// for what the funciton believes are `DefId`s that did not get codegenned. I suspect the issue +// may be related to this process, but this needs to be confirmed. It may not be possible to know +// for sure if a function is truly unused and should be reported with `Zero` coverage if it may +// still get used from an external crate. (Something to look at: If the `DefId` in MIR corresponds +// _only_ to the generic function without type parameters, is the `DefId` in the codegenned set, +// instantiated with one of the type parameters (in either or both crates) a *different* `DefId`? +// If so, `add_unreachable_coverage()` would assume the MIR `DefId` was uncovered, and would add +// unreachable coverage. +// +// I didn't think they could be different, but if they can, we would need to find the `DefId` for +// the generic function MIR and include it in the set of "codegenned" DefIds if any instantiation +// of that generic function does exist. +// +// Note, however, for `used_with_same_type_from_bin_crate_and_lib_crate_generic_function()` both +// crates use this function with the same type variant. The function does not have multiple +// instantiations, so the coverage analysis is not confused. No "Unexecuted instantiations" errors +// are reported. diff --git a/src/test/run-make-fulldeps/coverage/loop_break_value.rs b/src/test/run-make-fulldeps/coverage/loop_break_value.rs index ba66d136de1e3..dbc4fad7a2316 100644 --- a/src/test/run-make-fulldeps/coverage/loop_break_value.rs +++ b/src/test/run-make-fulldeps/coverage/loop_break_value.rs @@ -1,4 +1,4 @@ -#![allow(unused_assignments)] +#![allow(unused_assignments, unused_variables)] fn main() { let result diff --git a/src/test/run-make-fulldeps/coverage/loops_branches.rs b/src/test/run-make-fulldeps/coverage/loops_branches.rs index a9df7e0fab75f..938421d32e7a5 100644 --- a/src/test/run-make-fulldeps/coverage/loops_branches.rs +++ b/src/test/run-make-fulldeps/coverage/loops_branches.rs @@ -1,4 +1,4 @@ -#![allow(unused_assignments)] +#![allow(unused_assignments, unused_variables, while_true)] // This test confirms an earlier problem was resolved, supporting the MIR graph generated by the // structure of this `fmt` function. diff --git a/src/test/run-make-fulldeps/coverage/simple_match.rs b/src/test/run-make-fulldeps/coverage/simple_match.rs index c9a24f7a9d35d..be99e59a82685 100644 --- a/src/test/run-make-fulldeps/coverage/simple_match.rs +++ b/src/test/run-make-fulldeps/coverage/simple_match.rs @@ -1,4 +1,4 @@ -#![allow(unused_assignments)] +#![allow(unused_assignments, unused_variables)] fn main() { // Initialize test constants in a way that cannot be determined at compile time, to ensure diff --git a/src/test/run-make-fulldeps/coverage/used_crate/mod.rs b/src/test/run-make-fulldeps/coverage/used_crate/mod.rs deleted file mode 100644 index 825eff4d35248..0000000000000 --- a/src/test/run-make-fulldeps/coverage/used_crate/mod.rs +++ /dev/null @@ -1,43 +0,0 @@ -#![allow(unused_assignments, unused_variables)] - -use std::fmt::Debug; - -pub fn used_function() { - // Initialize test constants in a way that cannot be determined at compile time, to ensure - // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from - // dependent conditions. - let is_true = std::env::args().len() == 1; - let mut countdown = 0; - if is_true { - countdown = 10; - } - used_twice_generic_function("some str"); -} - -pub fn used_generic_function(arg: T) { - println!("used_generic_function with {:?}", arg); -} - -pub fn used_twice_generic_function(arg: T) { - println!("used_twice_generic_function with {:?}", arg); -} - -pub fn unused_generic_function(arg: T) { - println!("unused_generic_function with {:?}", arg); -} - -pub fn unused_function() { - let is_true = std::env::args().len() == 1; - let mut countdown = 2; - if !is_true { - countdown = 20; - } -} - -fn unused_private_function() { - let is_true = std::env::args().len() == 1; - let mut countdown = 2; - if !is_true { - countdown = 20; - } -} diff --git a/src/test/run-make-fulldeps/coverage/uses_crate.rs b/src/test/run-make-fulldeps/coverage/uses_crate.rs index 473d43217a994..8d24b1ca3e67b 100644 --- a/src/test/run-make-fulldeps/coverage/uses_crate.rs +++ b/src/test/run-make-fulldeps/coverage/uses_crate.rs @@ -1,10 +1,12 @@ #![allow(unused_assignments, unused_variables)] -mod used_crate; +extern crate used_crate; fn main() { used_crate::used_function(); let some_vec = vec![1, 2, 3, 4]; - used_crate::used_generic_function(&some_vec); - used_crate::used_twice_generic_function(some_vec); + used_crate::used_only_from_bin_crate_generic_function(&some_vec); + used_crate::used_only_from_bin_crate_generic_function("used from bin uses_crate.rs"); + used_crate::used_from_bin_crate_and_lib_crate_generic_function(some_vec); + used_crate::used_with_same_type_from_bin_crate_and_lib_crate_generic_function("interesting?"); } From dc4bd9067eda1df118fc48cb6b828d72e916e1bb Mon Sep 17 00:00:00 2001 From: Rich Kadel Date: Thu, 3 Dec 2020 12:00:33 -0800 Subject: [PATCH 7/7] Tweak to Makefile to overcome MacOS make corruption bug --- .../run-make-fulldeps/coverage-reports/Makefile | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/test/run-make-fulldeps/coverage-reports/Makefile b/src/test/run-make-fulldeps/coverage-reports/Makefile index 89d5974d73c3b..302f09ae422bc 100644 --- a/src/test/run-make-fulldeps/coverage-reports/Makefile +++ b/src/test/run-make-fulldeps/coverage-reports/Makefile @@ -87,20 +87,14 @@ endif %: $(SOURCEDIR)/lib/%.rs # Compile the test library with coverage instrumentation $(RUSTC) $(SOURCEDIR)/lib/$@.rs \ - $$( grep -q '^\/\/ require-rust-edition-2018' $(SOURCEDIR)/lib/$@.rs && \ - echo "--edition=2018" \ - ) \ - --crate-type rlib \ - -Zinstrument-coverage + $$( grep -q '^\/\/ require-rust-edition-2018' $(SOURCEDIR)/lib/$@.rs && echo "--edition=2018" ) \ + --crate-type rlib -Zinstrument-coverage %: $(SOURCEDIR)/%.rs # Compile the test program with coverage instrumentation $(RUSTC) $(SOURCEDIR)/$@.rs \ - $$( grep -q '^\/\/ require-rust-edition-2018' $(SOURCEDIR)/$@.rs && \ - echo "--edition=2018" \ - ) \ - -L "$(TMPDIR)" \ - -Zinstrument-coverage + $$( grep -q '^\/\/ require-rust-edition-2018' $(SOURCEDIR)/$@.rs && echo "--edition=2018" ) \ + -L "$(TMPDIR)" -Zinstrument-coverage # Run it in order to generate some profiling data, # with `LLVM_PROFILE_FILE=` environment variable set to