Skip to content

coverage: Separate initial span extraction from span processing - #116409

Merged
bors merged 3 commits into
rust-lang:masterfrom
Zalathar:span-extraction
Oct 10, 2023
Merged

coverage: Separate initial span extraction from span processing#116409
bors merged 3 commits into
rust-lang:masterfrom
Zalathar:span-extraction

Conversation

@Zalathar

Copy link
Copy Markdown
Member

One of the main subtasks of coverage instrumentation is looking through MIR to determine a list of source code spans that require coverage counters.

That task is in turn subdivided into a few main steps:

  • Getting the initial spans from MIR statements/terminators
  • Processing the list of spans to merge or truncate nearby spans as necessary
  • Grouping the processed spans by their corresponding coverage graph node

This PR enforces a firmer separation between the first two steps (span extraction and span processing), which ends up slightly simplifying both steps, since they don't need to deal with state that is only meaningful for the other step.


@rustbot label +A-code-coverage

@rustbot

Copy link
Copy Markdown
Collaborator

r? @WaffleLapkin

(rustbot has picked a reviewer for you, use r? to override)

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Oct 4, 2023
@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred to MIR optimizations

cc @rust-lang/wg-mir-opt

@rustbotrustbot added the A-code-coverage Area: Source-based code coverage (-Cinstrument-coverage) label Oct 4, 2023
@Zalathar

Copy link
Copy Markdown
MemberAuthor
  • The first patch only moves code and updates imports.
  • The second patch then simplifies the moved code by disconnecting it from CoverageSpansGenerator.
    • This converts a method function to an ordinary function, so there's a lot of indentation churn.
  • The third patch cleans up some unnecessary data structures that were left over from coverage: Remove debug code from the instrumentor #115962.

@WaffleLapkin

Copy link
Copy Markdown
Member

r? compiler

@oli-obk

Copy link
Copy Markdown
Contributor

r? @oli-obk

By performal initial span extraction in a separate free function, we can remove
some accidental complexity from the main generator code.
This enum was mainly needed to track the precise origin of a span in MIR, for
debug printing purposes. Since the old debug code was removed in rust-lang#115962, we
can replace it with just the span itself.
@oli-obk

Copy link
Copy Markdown
Contributor

@bors r+ rollup

@bors

bors commented Oct 10, 2023

Copy link
Copy Markdown
Collaborator

📌 Commit 6c44425 has been approved by oli-obk

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 10, 2023
@bors

bors commented Oct 10, 2023

Copy link
Copy Markdown
Collaborator

⌛ Testing commit 6c44425 with merge 5c37696...

@bors

bors commented Oct 10, 2023

Copy link
Copy Markdown
Collaborator

☀️ Test successful - checks-actions
Approved by: oli-obk
Pushing 5c37696 to master...

@borsbors added the merged-by-bors This PR was explicitly merged by bors. label Oct 10, 2023
@bors
bors merged commit 5c37696 into rust-lang:masterOct 10, 2023
@rustbotrustbot added this to the 1.75.0 milestone Oct 10, 2023
@Zalathar
Zalathar deleted the span-extraction branch October 10, 2023 12:31
@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (5c37696): comparison URL.

Overall result: no relevant changes - no action needed

@rustbot label: -perf-regression

Instruction count

This benchmark run did not return any relevant results for this metric.

Max RSS (memory usage)

Results

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
-4.1%[-4.1%, -4.1%]1
Improvements ✅
(secondary)
-2.3%[-2.7%, -2.0%]3
All ❌✅ (primary)-4.1%[-4.1%, -4.1%]1

Cycles

This benchmark run did not return any relevant results for this metric.

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 627.172s -> 627.375s (0.03%)
Artifact size: 270.83 MiB -> 270.86 MiB (0.01%)

bors-ferroceneBot added a commit to ferrocene/ferrocene that referenced this pull request Oct 12, 2023
48: Pull upstream master 2023 10 12 r=tshepang a=Dajamante
* rust-lang/rust#113487
* rust-lang/rust#116506
* rust-lang/rust#116448
* rust-lang/rust#116640
* rust-lang/rust#116627
* rust-lang/rust#116597
* rust-lang/rust#116436
* rust-lang/rust#116315
* rust-lang/rust#116219
* rust-lang/rust#113218
* rust-lang/rust#115937
* rust-lang/rust#116014
* rust-lang/rust#116623
* rust-lang/rust#112818
* rust-lang/rust#115948
* rust-lang/rust#116622
* rust-lang/rust#116621
* rust-lang/rust#116612
* rust-lang/rust#116611
* rust-lang/rust#116530
* rust-lang/rust#95967
* rust-lang/rust#116578
* rust-lang/rust#113915
* rust-lang/rust#116605
* rust-lang/rust#116574
* rust-lang/rust#116560
* rust-lang/rust#116559
* rust-lang/rust#116503
* rust-lang/rust#116444
* rust-lang/rust#116250
* rust-lang/rust#109422
* rust-lang/rust#116598
* rust-lang/rust#116596
* rust-lang/rust#116595
* rust-lang/rust#116589
* rust-lang/rust#116586
* rust-lang/rust#116551
* rust-lang/rust#116409
* rust-lang/rust#116548
* rust-lang/rust#116366
* rust-lang/rust#109882
* rust-lang/rust#116497
* rust-lang/rust#116532
* rust-lang/rust#116569
* rust-lang/rust#116561
* rust-lang/rust#116556
* rust-lang/rust#116549
* rust-lang/rust#116543
* rust-lang/rust#116537
* rust-lang/rust#115882
* rust-lang/rust#116142
* rust-lang/rust#115238
* rust-lang/rust#116533
* rust-lang/rust#116096
* rust-lang/rust#116468
* rust-lang/rust#116515
* rust-lang/rust#116454
* rust-lang/rust#116183
* rust-lang/rust#116514
* rust-lang/rust#116509
* rust-lang/rust#116487
* rust-lang/rust#116486
* rust-lang/rust#116450
* rust-lang/rust#114623
* rust-lang/rust#116416
* rust-lang/rust#116437
* rust-lang/rust#100806
* rust-lang/rust#116330
* rust-lang/rust#116310
* rust-lang/rust#115583
* rust-lang/rust#116457
* rust-lang/rust#116508
* rust-lang/rust#109214
* rust-lang/rust#116318
* rust-lang/rust#116501
* rust-lang/rust#116500
* rust-lang/rust#116458
* rust-lang/rust#116400
* rust-lang/rust#116277
* rust-lang/rust#114709
* rust-lang/rust#116492
* rust-lang/rust#116484
* rust-lang/rust#116481
* rust-lang/rust#116474
* rust-lang/rust#116466
* rust-lang/rust#116423
* rust-lang/rust#116297
* rust-lang/rust#114564
* rust-lang/rust#114811
* rust-lang/rust#116489
* rust-lang/rust#115304
Co-authored-by: Peter Hall <peter.hall@hyperexponential.com>
Co-authored-by: Emanuele Vannacci <emanuele.vannacci@gmail.com>
Co-authored-by: Neven Villani <vanille@crans.org>
Co-authored-by: Alex Macleod <alex@macleod.io>
Co-authored-by: Tamir Duberstein <tamird@gmail.com>
Co-authored-by: Eduardo Sánchez Muñoz <eduardosm-dev@e64.io>
Co-authored-by: koka <koka.code@gmail.com>
Co-authored-by: bors <bors@rust-lang.org>
Co-authored-by: Philipp Krones <hello@philkrones.com>
Co-authored-by: Camille GILLOT <gillot.camille@gmail.com>
Co-authored-by: Esteban Küber <esteban@kuber.com.ar>
Co-authored-by: Ralf Jung <post@ralfj.de>
bors-ferroceneBot added a commit to ferrocene/ferrocene that referenced this pull request Oct 13, 2023
48: Pull upstream master 2023 10 12 r=tshepang a=Dajamante
* rust-lang/rust#113487
* rust-lang/rust#116506
* rust-lang/rust#116448
* rust-lang/rust#116640
* rust-lang/rust#116627
* rust-lang/rust#116597
* rust-lang/rust#116436
* rust-lang/rust#116315
* rust-lang/rust#116219
* rust-lang/rust#113218
* rust-lang/rust#115937
* rust-lang/rust#116014
* rust-lang/rust#116623
* rust-lang/rust#112818
* rust-lang/rust#115948
* rust-lang/rust#116622
* rust-lang/rust#116621
* rust-lang/rust#116612
* rust-lang/rust#116611
* rust-lang/rust#116530
* rust-lang/rust#95967
* rust-lang/rust#116578
* rust-lang/rust#113915
* rust-lang/rust#116605
* rust-lang/rust#116574
* rust-lang/rust#116560
* rust-lang/rust#116559
* rust-lang/rust#116503
* rust-lang/rust#116444
* rust-lang/rust#116250
* rust-lang/rust#109422
* rust-lang/rust#116598
* rust-lang/rust#116596
* rust-lang/rust#116595
* rust-lang/rust#116589
* rust-lang/rust#116586
* rust-lang/rust#116551
* rust-lang/rust#116409
* rust-lang/rust#116548
* rust-lang/rust#116366
* rust-lang/rust#109882
* rust-lang/rust#116497
* rust-lang/rust#116532
* rust-lang/rust#116569
* rust-lang/rust#116561
* rust-lang/rust#116556
* rust-lang/rust#116549
* rust-lang/rust#116543
* rust-lang/rust#116537
* rust-lang/rust#115882
* rust-lang/rust#116142
* rust-lang/rust#115238
* rust-lang/rust#116533
* rust-lang/rust#116096
* rust-lang/rust#116468
* rust-lang/rust#116515
* rust-lang/rust#116454
* rust-lang/rust#116183
* rust-lang/rust#116514
* rust-lang/rust#116509
* rust-lang/rust#116487
* rust-lang/rust#116486
* rust-lang/rust#116450
* rust-lang/rust#114623
* rust-lang/rust#116416
* rust-lang/rust#116437
* rust-lang/rust#100806
* rust-lang/rust#116330
* rust-lang/rust#116310
* rust-lang/rust#115583
* rust-lang/rust#116457
* rust-lang/rust#116508
* rust-lang/rust#109214
* rust-lang/rust#116318
* rust-lang/rust#116501
* rust-lang/rust#116500
* rust-lang/rust#116458
* rust-lang/rust#116400
* rust-lang/rust#116277
* rust-lang/rust#114709
* rust-lang/rust#116492
* rust-lang/rust#116484
* rust-lang/rust#116481
* rust-lang/rust#116474
* rust-lang/rust#116466
* rust-lang/rust#116423
* rust-lang/rust#116297
* rust-lang/rust#114564
* rust-lang/rust#114811
* rust-lang/rust#116489
* rust-lang/rust#115304
Co-authored-by: Emanuele Vannacci <emanuele.vannacci@gmail.com>
Co-authored-by: Neven Villani <vanille@crans.org>
Co-authored-by: Alex Macleod <alex@macleod.io>
Co-authored-by: Tamir Duberstein <tamird@gmail.com>
Co-authored-by: Eduardo Sánchez Muñoz <eduardosm-dev@e64.io>
Co-authored-by: koka <koka.code@gmail.com>
Co-authored-by: bors <bors@rust-lang.org>
Co-authored-by: Philipp Krones <hello@philkrones.com>
Co-authored-by: Camille GILLOT <gillot.camille@gmail.com>
Co-authored-by: Esteban Küber <esteban@kuber.com.ar>
Co-authored-by: Ralf Jung <post@ralfj.de>
Co-authored-by: ShE3py <52315535+she3py@users.noreply.github.com>
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 20, 2023
coverage: Fix inconsistent handling of function signature spans
While doing some more cleanup of `spans`, I noticed a strange inconsistency in how function signatures are handled. Normally the function signature span is treated as though it were executable as part of the start of the function, but in some cases the signature span disappears entirely from coverage, for no obvious reason.
This is caused by the fact that spans created by `CoverageSpan::for_fn_sig` don't add the span to their `merged_spans` field (unlike normal statement/terminator spans). In cases where the span-processing code looks at those merged spans, it thinks the signature span is no longer visible and deletes it.
Adding the signature span to `merged_spans` resolves the inconsistency.
(Prior to rust-lang#116409 this wouldn't have been possible, because there was no case in the old `CoverageStatement` enum representing a signature. Now that `merged_spans` is just a list of spans, that's no longer an obstacle.)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 21, 2023
…k,cjgillot
coverage: Fix inconsistent handling of function signature spans
While doing some more cleanup of `spans`, I noticed a strange inconsistency in how function signatures are handled. Normally the function signature span is treated as though it were executable as part of the start of the function, but in some cases the signature span disappears entirely from coverage, for no obvious reason.
This is caused by the fact that spans created by `CoverageSpan::for_fn_sig` don't add the span to their `merged_spans` field (unlike normal statement/terminator spans). In cases where the span-processing code looks at those merged spans, it thinks the signature span is no longer visible and deletes it.
Adding the signature span to `merged_spans` resolves the inconsistency.
(Prior to rust-lang#116409 this wouldn't have been possible, because there was no case in the old `CoverageStatement` enum representing a signature. Now that `merged_spans` is just a list of spans, that's no longer an obstacle.)
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Oct 21, 2023
Rollup merge of rust-lang#116974 - Zalathar:signature-spans, r=oli-obk,cjgillot
coverage: Fix inconsistent handling of function signature spans
While doing some more cleanup of `spans`, I noticed a strange inconsistency in how function signatures are handled. Normally the function signature span is treated as though it were executable as part of the start of the function, but in some cases the signature span disappears entirely from coverage, for no obvious reason.
This is caused by the fact that spans created by `CoverageSpan::for_fn_sig` don't add the span to their `merged_spans` field (unlike normal statement/terminator spans). In cases where the span-processing code looks at those merged spans, it thinks the signature span is no longer visible and deletes it.
Adding the signature span to `merged_spans` resolves the inconsistency.
(Prior to rust-lang#116409 this wouldn't have been possible, because there was no case in the old `CoverageStatement` enum representing a signature. Now that `merged_spans` is just a list of spans, that's no longer an obstacle.)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-code-coverageArea: Source-based code coverage (-Cinstrument-coverage)merged-by-borsThis PR was explicitly merged by bors.S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@Zalathar@rustbot@WaffleLapkin@oli-obk@bors@rust-timer@Swatinem@davidtwco