Skip to content

Qualified MC/DC coverage tooling — GNATcoverage + GNATPro for Rust (the pedigree path rustc abandoned) #51

Description

@O6lvl4

Part of #11 / #12; the sibling of #18 on the same shelf (adjudicated direction, 2026-08-27). Context: rustc removed its MC/DC instrumentation upstream (rust-lang/rust#144999), so almide's rung-2 evidence is the per-decision vector ledger (almide#566) with condition coverage as backstop. AdaCore's GNATcoverage supports Rust at statement / decision / MC/DC level — but only against the commercial GNATPro for Rust toolchain ("compatibility with other rust toolchains is not guaranteed"; the Rust support is declared unstable). That is the qualified-pedigree endgame: gnatcov is the DO-178C-qualifiable coverage tool family, and GNATPro for Rust doubles as a second candidate for the qualified native seat (#18: Ferrocene / CompCert / — now — GNATPro for Rust).

Why external

A commercial toolchain subscription and, for certification credit, gnatcov's qualification material. Engineering here only prepares the evaluation.

What the project prepares in advance (solo)

  • Free cross-check measurement: a workflow_dispatch CI job pins a PRE-REMOVAL dated nightly (the -Zcoverage-options=mcdc era) and measures real MC/DC for the safety set once — not evidence to pin (dead flag, upstream calls the implementation incomplete), but a calibration of the vector ledger: any decision the old instrumentation marks uncovered that the ledger calls vectors is a ledger bug. (almide side, in flight.)
  • Evaluation acceptance test, written before any sales call: gnatcov + GNATPro on the ten safety files must (1) report MC/DC per decision; (2) agree with the 16 landed independence-pair vectors (each resolved site fully covered when only its vector tests run); (3) run on the pinned CI OS; (4) not change the compiled artifact's behaviour (byte-compare the test binaries' outputs).

Questions for AdaCore (the dossier)

  1. GNATPro for Rust: which upstream rustc does it track, and is its MC/DC the pre-#144999 implementation or an independent one?
  2. Stability commitment for the Rust MC/DC feature (the docs mark it unstable) and the roadmap to qualification material for Rust coverage (gnatcov's DO-330 kit today covers Ada/C/C++).
  3. Platform coverage (linux x86_64 CI + macOS arm64 dev), licensing model per-seat vs per-CI-runner, and evaluation licence availability.
  4. Interaction with a Ferrocene-based build (Qualified native toolchain material — Ferrocene subscription or CompCert commercial licence #18): can gnatcov consume coverage from a Ferrocene-compiled artifact, or is GNATPro-for-Rust-only instrumentation assumed?

Exit

Either: an evaluation licence obtained, the acceptance test green, and a decision recorded (ADR) on GNATPro-for-Rust as coverage tool and/or native seat — or a written finding of why not, kept with #18.

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-resourcesNot engineering: needs money, a licence, or a legal act (qualified toolchain, entity, funding)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions