Unify flags for code coverage
Jørgen Kvalsvik
j@lambda.is
Thu Dec 4 19:30:14 GMT 2025
On 11/11/25 08:52, Jørgen Kvalsvik wrote:
> Hi,
>
> The current state of flags for controlling the code coverage features is
> a bit messy. GCC uses these options to enable different kinds of coverage:
>
> -ftest-coverage
> -fcondition-coverage
> -fpath-coverage
> --coverage
>
> There's also -fprofile-arcs which is implied by --coverage, but -
> fprofile-arcs is useful outside of coverage for profile-guided
> optimizations, maybe other uses. Unlike -fprofile-arcs, the -fcondition-
> coverage and -fpath-coverage does not make sense without also enabling -
> ftest-coverage, I have a patch fixing that [1]. --coverage has
> historically been the flag intended to be used by users, as it also
> tells to linker to link libgcov. It never really makes sense to use -
> fcondition-coverage or -fpath-coverage without -ftest-coverage.
>
> To make matters a bit more confusing, -fcondition-coverage measures
> masking MC/DC [2], and -fpath-coverage measures prime path coverage [3]
> [4], and neither is immediately obvious from the flags. For comparison,
> clang uses -fmcdc for its (unique-cause) MC/DC support. Both these flags
> were added by me, and the intention at the time was for them to maybe
> include options later for specifying what form of condition- and path
> coverage to measure, with the current behaviour remaining the default.
> We can still do this, of course, but either way it's still a bit of a mess.
>
> I propose to either extend the --coverage flag with an option, or add a
> new flag, similar to the -fsanitize=... family, maybe with some
> defaults. Example usage:
>
> gcc a.c -o a --coverage # line and branch coverage
> gcc a.c -o a --coverage=prime-path,mcdc # implies masking MC/DC
> gcc a.c -o a --coverage=prime-path,masking-mcdc # explicitly masking MC/DC
> gcc a.c -o a --coverage=prime-path --coverage=masking-mcdc # repeated
> use is ok too
>
> An alternative to overloading the --coverage flag is adding a new -
> fcoverage=... flag, similar to -fsanitize.
>
> Thoughts, alternatives?
>
> Thanks,
> Jørgen
>
> [1] https://gcc.gnu.org/pipermail/gcc-patches/2025-November/699758.html
> [2] https://en.wikipedia.org/wiki/Modified_condition/decision_coverage
> [3] https://cs.gmu.edu/~johnsonb/fall20/Lecture_19-AOCh7(2).pdf
> [4] https://patch.no/static/papers/prime-path-coverage-in-
> gcc-2025-03-27.pdf
Any thoughts on this? I'm happy to implement it either way we're going for.
Thanks,
Jørgen
More information about the Gcc
mailing list