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