Skip to content

coverage: Remove all unstable support for MC/DC instrumentation - #144999

Merged
bors merged 1 commit into
rust-lang:masterfrom
Zalathar:remove-mcdc
Aug 8, 2025
Merged

coverage: Remove all unstable support for MC/DC instrumentation#144999
bors merged 1 commit into
rust-lang:masterfrom
Zalathar:remove-mcdc

Conversation

@Zalathar

@Zalathar Zalathar commented Aug 6, 2025

Copy link
Copy Markdown
Member

Preliminary support for a partial implementation of “Modified Condition/Decision Coverage” instrumentation was added behind the unstable flag -Zcoverage-options=mcdc in 2024. These are the most substantial PRs involved:

At the time, I accepted these PRs with relatively modest scrutiny, because I did not want to stand in the way of independent work on MC/DC instrumentation. My hope was that ongoing work by interested contributors would lead to the code becoming clearer and more maintainable over time.


However, that MC/DC code has proven itself to be a major burden on overall maintenance of coverage instrumentation, and a major obstacle to other planned improvements, such as internal changes needed for proper support of macro expansion regions.

I have also become reluctant to accept any further MC/DC-related changes that would increase this burden.

That tension has resulted in an unhappy impasse. On one hand, the present MC/DC implementation is not yet complete, and shows little sign of being complete at an acceptable level of code quality in the foreseeable future. On the other hand, the continued existence of this partial MC/DC implementation is imposing serious maintenance burdens on every other aspect of coverage instrumentation, and is preventing some of the very improvements that would make it easier to accept expanded MC/DC support in the future.

While I know this will be disappointing to some, I think the healthy way forward is accept that I made the wrong call in accepting the current implementation, and to remove it entirely from the compiler.

@Zalathar Zalathar added A-code-coverage Area: Source-based code coverage (-Cinstrument-coverage) F-coverage-mcdc MC/DC coverage via -Cinstrument-coverage with -Zcoverage-options=mcdc labels Aug 6, 2025
@rustbot

rustbot commented Aug 6, 2025

Copy link
Copy Markdown
Collaborator

r? @matthewjasper

rustbot has assigned @matthewjasper.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. 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 Aug 6, 2025
@rustbot

rustbot commented Aug 6, 2025

Copy link
Copy Markdown
Collaborator

Some changes occurred in match lowering

cc @Nadrieril

Some changes occurred in compiler/rustc_codegen_ssa

cc @WaffleLapkin

Some changes occurred to MIR optimizations

cc @rust-lang/wg-mir-opt

@oli-obk

oli-obk commented Aug 7, 2025

Copy link
Copy Markdown
Contributor

r? @oli-obk

@bors r+

@bors

bors commented Aug 7, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit 81ed042 has been approved by oli-obk

It is now in the queue for this repository.

@rustbot rustbot assigned oli-obk and unassigned matthewjasper Aug 7, 2025
@bors bors 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 Aug 7, 2025
bors added a commit that referenced this pull request Aug 8, 2025
Rollup of 19 pull requests

Successful merges:

 - #144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - #144764 ([codegen] assume the tag, not the relative discriminant)
 - #144807 (Streamline config in bootstrap)
 - #144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - #144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - #144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - #144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - #144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - #144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - #145009 (A couple small changes for rust-analyzer next-solver work)
 - #145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - #145042 (stdarch subtree update)
 - #145047 (move `type_check` out of `compute_regions`)
 - #145051 (Prevent name collisions with internal implementation details)
 - #145053 (Add a lot of NLL `known-bug` tests)
 - #145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - #145057 (Clean up some resolved test regressions of const trait removals in std)
 - #145068 (Readd myself to review queue)
 - #145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit 562222b into rust-lang:master Aug 8, 2025
10 checks passed
@rustbot rustbot added this to the 1.91.0 milestone Aug 8, 2025
rust-timer added a commit that referenced this pull request Aug 8, 2025
Rollup merge of #144999 - Zalathar:remove-mcdc, r=oli-obk

coverage: Remove all unstable support for MC/DC instrumentation

Preliminary support for a partial implementation of “Modified Condition/Decision Coverage” instrumentation was added behind the unstable flag `-Zcoverage-options=mcdc` in 2024. These are the most substantial PRs involved:

- #123409
- #126733

At the time, I accepted these PRs with relatively modest scrutiny, because I did not want to stand in the way of independent work on MC/DC instrumentation. My hope was that ongoing work by interested contributors would lead to the code becoming clearer and more maintainable over time.

---

However, that MC/DC code has proven itself to be a major burden on overall maintenance of coverage instrumentation, and a major obstacle to other planned improvements, such as internal changes needed for proper support of macro expansion regions.

I have also become reluctant to accept any further MC/DC-related changes that would increase this burden.

That tension has resulted in an unhappy impasse. On one hand, the present MC/DC implementation is not yet complete, and shows little sign of being complete at an acceptable level of code quality in the foreseeable future. On the other hand, the continued existence of this partial MC/DC implementation is imposing serious maintenance burdens on every other aspect of coverage instrumentation, and is preventing some of the very improvements that would make it easier to accept expanded MC/DC support in the future.

While I know this will be disappointing to some, I think the healthy way forward is accept that I made the wrong call in accepting the current implementation, and to remove it entirely from the compiler.
@Zalathar
Zalathar deleted the remove-mcdc branch August 8, 2025 09:36
github-actions Bot pushed a commit to rust-lang/compiler-builtins that referenced this pull request Aug 9, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang/rust#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang/rust#144807 (Streamline config in bootstrap)
 - rust-lang/rust#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang/rust#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang/rust#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang/rust#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang/rust#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang/rust#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang/rust#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang/rust#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang/rust#145042 (stdarch subtree update)
 - rust-lang/rust#145047 (move `type_check` out of `compute_regions`)
 - rust-lang/rust#145051 (Prevent name collisions with internal implementation details)
 - rust-lang/rust#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang/rust#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang/rust#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang/rust#145068 (Readd myself to review queue)
 - rust-lang/rust#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
github-actions Bot pushed a commit to rust-lang/miri that referenced this pull request Aug 9, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang/rust#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang/rust#144807 (Streamline config in bootstrap)
 - rust-lang/rust#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang/rust#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang/rust#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang/rust#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang/rust#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang/rust#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang/rust#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang/rust#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang/rust#145042 (stdarch subtree update)
 - rust-lang/rust#145047 (move `type_check` out of `compute_regions`)
 - rust-lang/rust#145051 (Prevent name collisions with internal implementation details)
 - rust-lang/rust#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang/rust#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang/rust#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang/rust#145068 (Readd myself to review queue)
 - rust-lang/rust#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
taiki-e added a commit to taiki-e/cargo-llvm-cov that referenced this pull request Aug 10, 2025
github-actions Bot pushed a commit to model-checking/verify-rust-std that referenced this pull request Aug 12, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang#144807 (Streamline config in bootstrap)
 - rust-lang#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang#145042 (stdarch subtree update)
 - rust-lang#145047 (move `type_check` out of `compute_regions`)
 - rust-lang#145051 (Prevent name collisions with internal implementation details)
 - rust-lang#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang#145068 (Readd myself to review queue)
 - rust-lang#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
rust-cloud-vms Bot pushed a commit to makai410/rustc_public that referenced this pull request Aug 16, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang/rust#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang/rust#144807 (Streamline config in bootstrap)
 - rust-lang/rust#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang/rust#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang/rust#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang/rust#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang/rust#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang/rust#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang/rust#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang/rust#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang/rust#145042 (stdarch subtree update)
 - rust-lang/rust#145047 (move `type_check` out of `compute_regions`)
 - rust-lang/rust#145051 (Prevent name collisions with internal implementation details)
 - rust-lang/rust#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang/rust#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang/rust#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang/rust#145068 (Readd myself to review queue)
 - rust-lang/rust#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
github-actions Bot pushed a commit to rust-lang/stdarch that referenced this pull request Aug 18, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang/rust#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang/rust#144807 (Streamline config in bootstrap)
 - rust-lang/rust#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang/rust#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang/rust#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang/rust#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang/rust#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang/rust#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang/rust#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang/rust#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang/rust#145042 (stdarch subtree update)
 - rust-lang/rust#145047 (move `type_check` out of `compute_regions`)
 - rust-lang/rust#145051 (Prevent name collisions with internal implementation details)
 - rust-lang/rust#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang/rust#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang/rust#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang/rust#145068 (Readd myself to review queue)
 - rust-lang/rust#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
rust-cloud-vms Bot pushed a commit to makai410/rustc_public that referenced this pull request Aug 20, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang/rust#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang/rust#144807 (Streamline config in bootstrap)
 - rust-lang/rust#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang/rust#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang/rust#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang/rust#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang/rust#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang/rust#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang/rust#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang/rust#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang/rust#145042 (stdarch subtree update)
 - rust-lang/rust#145047 (move `type_check` out of `compute_regions`)
 - rust-lang/rust#145051 (Prevent name collisions with internal implementation details)
 - rust-lang/rust#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang/rust#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang/rust#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang/rust#145068 (Readd myself to review queue)
 - rust-lang/rust#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
makai410 pushed a commit to makai410/rust that referenced this pull request Nov 8, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang#144807 (Streamline config in bootstrap)
 - rust-lang#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang#145042 (stdarch subtree update)
 - rust-lang#145047 (move `type_check` out of `compute_regions`)
 - rust-lang#145051 (Prevent name collisions with internal implementation details)
 - rust-lang#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang#145068 (Readd myself to review queue)
 - rust-lang#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
makai410 pushed a commit to makai410/rust that referenced this pull request Nov 10, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang#144807 (Streamline config in bootstrap)
 - rust-lang#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang#145042 (stdarch subtree update)
 - rust-lang#145047 (move `type_check` out of `compute_regions`)
 - rust-lang#145051 (Prevent name collisions with internal implementation details)
 - rust-lang#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang#145068 (Readd myself to review queue)
 - rust-lang#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
makai410 pushed a commit to makai410/rustc_public that referenced this pull request Nov 16, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang/rust#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang/rust#144807 (Streamline config in bootstrap)
 - rust-lang/rust#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang/rust#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang/rust#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang/rust#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang/rust#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang/rust#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang/rust#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang/rust#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang/rust#145042 (stdarch subtree update)
 - rust-lang/rust#145047 (move `type_check` out of `compute_regions`)
 - rust-lang/rust#145051 (Prevent name collisions with internal implementation details)
 - rust-lang/rust#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang/rust#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang/rust#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang/rust#145068 (Readd myself to review queue)
 - rust-lang/rust#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
Kobzol pushed a commit to Kobzol/rustc_codegen_gcc that referenced this pull request Dec 21, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang/rust#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang/rust#144807 (Streamline config in bootstrap)
 - rust-lang/rust#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang/rust#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang/rust#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang/rust#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang/rust#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang/rust#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang/rust#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang/rust#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang/rust#145042 (stdarch subtree update)
 - rust-lang/rust#145047 (move `type_check` out of `compute_regions`)
 - rust-lang/rust#145051 (Prevent name collisions with internal implementation details)
 - rust-lang/rust#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang/rust#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang/rust#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang/rust#145068 (Readd myself to review queue)
 - rust-lang/rust#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
Kobzol pushed a commit to Kobzol/rustc_codegen_cranelift that referenced this pull request Dec 29, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang/rust#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang/rust#144807 (Streamline config in bootstrap)
 - rust-lang/rust#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang/rust#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang/rust#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang/rust#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang/rust#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang/rust#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang/rust#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang/rust#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang/rust#145042 (stdarch subtree update)
 - rust-lang/rust#145047 (move `type_check` out of `compute_regions`)
 - rust-lang/rust#145051 (Prevent name collisions with internal implementation details)
 - rust-lang/rust#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang/rust#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang/rust#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang/rust#145068 (Readd myself to review queue)
 - rust-lang/rust#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
christian-schilling pushed a commit to christian-schilling/rustc_codegen_cranelift that referenced this pull request Jan 27, 2026
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang/rust#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang/rust#144807 (Streamline config in bootstrap)
 - rust-lang/rust#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang/rust#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang/rust#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang/rust#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang/rust#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang/rust#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang/rust#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang/rust#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang/rust#145042 (stdarch subtree update)
 - rust-lang/rust#145047 (move `type_check` out of `compute_regions`)
 - rust-lang/rust#145051 (Prevent name collisions with internal implementation details)
 - rust-lang/rust#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang/rust#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang/rust#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang/rust#145068 (Readd myself to review queue)
 - rust-lang/rust#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
christian-schilling pushed a commit to christian-schilling/rustc_codegen_cranelift that referenced this pull request Jan 27, 2026
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang/rust#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang/rust#144807 (Streamline config in bootstrap)
 - rust-lang/rust#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang/rust#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang/rust#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang/rust#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang/rust#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang/rust#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang/rust#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang/rust#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang/rust#145042 (stdarch subtree update)
 - rust-lang/rust#145047 (move `type_check` out of `compute_regions`)
 - rust-lang/rust#145051 (Prevent name collisions with internal implementation details)
 - rust-lang/rust#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang/rust#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang/rust#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang/rust#145068 (Readd myself to review queue)
 - rust-lang/rust#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
lovesegfault added a commit to lovesegfault/rio-build that referenced this pull request Mar 9, 2026
Rust stable -C instrument-coverage only emits block/region data (0
BRDA records in lcov). Branch coverage requires -Z coverage-options=
branch (nightly-gated). RUSTC_BOOTSTRAP=1 unlocks -Z flags on the
stable toolchain — coverage-only, non-instrumented builds stay pure
stable for CI parity.

Applied to both:
- rio-workspace-cov (VM tests): RUSTFLAGS + RUSTC_BOOTSTRAP in covArgs
- unit-test coverage: cargo-llvm-cov --branch + RUSTC_BOOTSTRAP

genhtml --branch-coverage in both coverage-html and coverage-full so
the HTML shows branch hit/miss annotations.

Verified: minimal if/else test emits 2 BRDA records, 1 hit.

Note: rust-lang/rust#144999 removed MC/DC (mcdc option), NOT branch.
Valid options on rustc 1.93+nightly: block | branch | condition.
makai410 pushed a commit to makai410/rustc_public that referenced this pull request Mar 27, 2026
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#144400 (`tests/ui/issues/`: The Issues Strike Back [3/N])
 - rust-lang/rust#144764 ([codegen] assume the tag, not the relative discriminant)
 - rust-lang/rust#144807 (Streamline config in bootstrap)
 - rust-lang/rust#144899 (Print CGU reuse statistics in `-Zprint-mono-items`)
 - rust-lang/rust#144909 (Add new `test::print_merged_doctests_times` used by rustdoc to display more detailed time information)
 - rust-lang/rust#144912 (Resolver: introduce a conditionally mutable Resolver for (non-)speculative resolution.)
 - rust-lang/rust#144914 (Add support for `ty::Instance` path shortening in diagnostics)
 - rust-lang/rust#144931 ([win][arm64ec] Fix msvc-wholearchive for Arm64EC)
 - rust-lang/rust#144999 (coverage: Remove all unstable support for MC/DC instrumentation)
 - rust-lang/rust#145009 (A couple small changes for rust-analyzer next-solver work)
 - rust-lang/rust#145030 (GVN:  Do not flatten derefs with ProjectionElem::Index. )
 - rust-lang/rust#145042 (stdarch subtree update)
 - rust-lang/rust#145047 (move `type_check` out of `compute_regions`)
 - rust-lang/rust#145051 (Prevent name collisions with internal implementation details)
 - rust-lang/rust#145053 (Add a lot of NLL `known-bug` tests)
 - rust-lang/rust#145055 (Move metadata symbol export from exported_non_generic_symbols to exported_symbols)
 - rust-lang/rust#145057 (Clean up some resolved test regressions of const trait removals in std)
 - rust-lang/rust#145068 (Readd myself to review queue)
 - rust-lang/rust#145070 (Add minimal `armv7a-vex-v5` tier three target)

r? `@ghost`
`@rustbot` modify labels: rollup
avrabe added a commit to pulseengine/synth that referenced this pull request Aug 14, 2026
… (RQ-57-MCDC) (#978)

* feat(#912): MC/DC structural coverage over synth's own decision logic

RQ-57-MCDC. #912 sat N/A for six releases on a surface argument: `witness`
measures MC/DC on a Wasm artifact and synth emits ARM/RV32/A64 machine code,
so "run witness on synth's output" is a category error. That is true about
synth's OUTPUT and irrelevant — the decisions that ship a miscompile are in
synth's own Rust, and those compile to Wasm fine.

SURFACE, chosen on evidence (scripts/repro/mcdc_912_gate.md):

* REJECTED native LLVM MC/DC — not a preference, the capability was REMOVED
  from rustc (rust-lang/rust#144999, merged 2025-08-08, Rust 1.91). Probed on
  three nightlies: `mcdc` is rejected, only `block|branch|condition` accepted.
  `condition` is the trap in the family — it builds, and it emits ZERO
  `llvm.instrprof.mcdc.*` intrinsics and zero mcdc_records.
* REJECTED witness-over-the-fixtures-synth-compiles — it measures the fixture.
  gale's run named `pad_integral`, `do_count_chars`, `<u64 as Display>::fmt`,
  `write_prefix`, `cabi_realloc` and ZERO synth functions. A surface whose gap
  rows cannot name a synth decision cannot notice a missing condition in one.
* CHOSEN witness over a wasm32-wasip1 build of synth's OWN crates.
  `synth-mcdc-harness` is a thin row driver — it calls the REAL pub fns with
  inputs arriving through Wasm params; it re-implements no predicate.

THE RIGHT PARTS — scored where a missed condition HAS shipped a bug here:
static_data_addr (VCR-VER-003 #777/#757/#798), alloc_validator (VCR-RA-003
#815; #871's fix WAS a condition added to the save-set predicate), and the
RV32 bounds gate (#953/#959 — `mem_size == 0` was exempt from the power-of-two
check, so `(memory 0)` emitted an identity mask and every access ran unmasked).
EXCLUDED and named: instruction_selector (225 operator lines, its own lane);
the aarch64 bounds closures (#865 — residual); wcet declines (match-dispatch,
1 operator line in 1061, so MC/DC has nothing to say there).

MEASURED 20 decisions / 144 conditions / 63 proved / 31 gap / 50 dead, 3 at
full MC/DC. Identical under witness 0.28.0 and 0.42.0. Gap rows are PRINTED
with the closing vector — `is_ret` went 3-gap to 0-gap by adding exactly the
three vectors witness named.

THE GATE SCORES BY FUNCTION AND FLOORS COUNTS, for three reasons: the
module-wide figure is 3/770 because wasip1 links wasi-libc + std; witness's
`source_file` is an inlined-DWARF BASENAME and misattributes (resolve_owner's
decision reports as static_data_addr.rs:355, it is at :274 — witness#179); and
a ratio cannot notice a DELETED condition, which makes the percentage improve.

RED-FIRST, two mutations, two distinct failure paths, both restored
byte-identical:
  (a) delete `|| rs2 == Reg::RA` (the #871 fix)  -> 19/142/54/2, all four
      floors trip; the condition-COUNT drop is what a ratio cannot produce.
  (b) drop one truth-table row (ra_validate:14)  -> conditions stay 144,
      proved 63->62 and fully-proved 3->2.

Wired as the `mcdc-structural-coverage` CI job, witness pinned to v0.42.0,
with a non-vacuity assert so an empty scored table cannot print PASS.

Refs #912

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L

* fix(#912): CI mode-126 on mcdc_run.sh, pin the toolchain, ceiling the dead count

Three fixes from the first CI run and the cold read of it:

1. exit 126. `scripts/` is mode 644 in this repo (cf. scripts/oracle_run.py),
   so `./scripts/mcdc_run.sh` cannot exec on a fresh checkout even though it
   runs locally after a chmod. Invoke through `bash`, matching how every other
   script in this workflow is called.

2. PIN the toolchain to 1.96.1. The floors are counts of decisions and
   conditions RECONSTRUCTED FROM LOWERED WASM, so they are sensitive to how
   `std` inlines. `@stable` is a moving target and a Rust release could red
   this gate with no code change. Bumping the pin is allowed and obliges a
   RE-MEASURE, not a lowering. (Witness-version invariance — 0.28 = 0.42 — is
   evidence about witness, not about rustc; it does not transfer.)

3. CEILING the dead count at the measured 50. 50 of 144 scored conditions are
   never evaluated (40 in `is_straight_line`, whose match arms cover RV32
   opcodes the row set does not construct). That residual was the one number in
   the table nothing guarded: a change that stopped reaching the segment
   barriers would raise `dead`, lower nothing else, and PASS. It is also a
   third potency surface — mutation (a) moves dead 50 -> 52, so the mutated run
   now trips five floors instead of four.

Also trims the `sd_resolve_owner` doc comment, which claimed vectors the
measurement does not show: its 2 gap conditions are now stated as a measured
residual rather than implied closed.

Baseline re-verified unchanged: 20 / 3 / 144 / 63 / 31 / 50, PASS.

Refs #912

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L

* TEMPORARY red-first probe (#912) — DO NOT MERGE THIS COMMIT

Reverted by the very next commit. Two things in one CI run:

1. RE-MEASURE the floors on the platform the gate actually runs on. The first
   CI run proved what could only be argued locally: these counts are
   PLATFORM-dependent, not just toolchain-version dependent.

     ubuntu x86_64, rustc 1.96.1, witness 0.42.0:  22 / 130 / 57 / 23 gap / 50 dead, 4 full
     macOS aarch64, rustc 1.96.1, witness 0.42.0:  20 / 144 / 63 / 31 gap / 50 dead, 3 full

   Same toolchain version, same witness, same 56 rows, different host.
   `validate_final_allocation_rv32` presents as 9 decisions / 44 conditions on
   Linux and 4 / 43 on macOS; `ensure_supported_target` vanishes on Linux.
   Floors move to the CI numbers — RE-MEASURED, not lowered to fit. Both
   baselines are recorded in the script so the macOS delta is a stated fact
   rather than a surprise.

2. RE-PROVE POTENCY ON THAT PLATFORM. The local mutation evidence does NOT
   obviously transfer when the same function presents as 9 decisions instead
   of 4 — and "it obviously still works" is the reasoning this whole lane
   exists to distrust. So this commit ALSO deletes the #871 condition
   `|| rs2 == Reg::RA` from the RV32 allocation validator's save-set
   predicate. The MC/DC job must go RED on the condition-COUNT floor, and the
   VCR-RA-003 RV32 job should go red independently.

   If this commit is green, the gate is vacuous and the lane is wrong.

Refs #912

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L

* TEMPORARY red-first probe 2/2 (#912) — DO NOT MERGE, reverted next commit

Probe 1 (25a9195) went RED on CI as required, but at the WRONG STEP for the
evidence I wanted: the row-driver sanity gate (step 7) asserts
`ra_validate(4) == 1` (#871: unsaved ra must be a violation), so deleting
`|| rs2 == Reg::RA` fails there and the MC/DC measurement never runs. Two
independent gates catching one mutation is good engineering and useless as
proof that the MC/DC FLOORS bite.

This probe isolates them. It restores the source byte-identical (verified:
empty `git diff` vs the pre-mutation tree) and instead drops ONE truth-table
row — `ra_validate:14`, the non-sp `Lw` that gives `sp_slot_load` its
unique-cause pair. That touches no compiler behaviour, so:

  step 7 (row-driver sanity)  must PASS
  step 8 (witness run)        must PASS
  step 9 (MC/DC floors)       must FAIL on  and

Conditions must stay at 130 — coverage lost, nothing deleted. That is the
second of the two potency paths, and the one that proves the SCORING floor
itself is what goes red, on the platform it actually runs on.

Refs #912

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L

* chore(#912): restore the probes, record the CI-platform potency evidence

Both red-first probes reverted; the tree is byte-identical to 712f658 for
crates/synth-backend-riscv/src/alloc_validator.rs and scripts/mcdc_run.sh
(verified with an empty \$(git diff 712f658 -- <path>) on each).

What the two CI probes established, which the local run could not:

PROBE 1 (delete the #871 condition) went RED — at the WRONG STEP. The job's own
row-driver sanity gate asserts ra_validate(4) == 1 and fails there, so the MC/DC
measurement never ran; the VCR-RA-003 RV32 job went red independently too. Three
gates catching one mutation is good engineering and NO evidence that the MC/DC
floors bite. Recording it because 'a red gate is not evidence that the gate you
were testing works' generalises well past this lane — read WHICH STEP failed.

PROBE 2 (drop one truth-table row, no compiler behaviour touched) isolated them.
Run 31821746035: sanity gate PASS, witness run PASS, SCORING STEP FAIL.

  baseline  22  4  130  57  23  50
  probe 2   22  3  130  56  24  50
  FAIL: proved conditions 56 < floor 57
  FAIL: fully-proved decisions 3 < floor 4

Decisions unchanged, CONDITIONS UNCHANGED at 130 — nothing deleted — while
proved fell and a decision dropped out of full MC/DC. That is the signature of
coverage lost with structure intact, produced by the MC/DC scoring step itself,
on the platform the gate blocks on.

Refs #912

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-code-coverage Area: Source-based code coverage (-Cinstrument-coverage) A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. F-coverage-mcdc MC/DC coverage via -Cinstrument-coverage with -Zcoverage-options=mcdc S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant 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.

5 participants