https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118553

            Bug ID: 118553
           Summary: gcov misses coverage after calling vfork/exec
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: gcov-profile
          Assignee: unassigned at gcc dot gnu.org
          Reporter: roland.illig at gmx dot de
  Target Milestone: ---

When a process calls vfork and exec, any further code coverage from the parent
process is not recorded.

Affected:
- gcc 12
- gcc 13
- gcc 14

Not affected:
- gcc 10
- calls to fork (instead of vfork)
- calls to posix_spawn (instead of vfork)


#! /bin/sh
set -eu

cat <<EOF >prog.c
#include <unistd.h>

int
main(void)
{
        pid_t pid = vfork();
        switch (pid) {
        case 0:
                execl("/bin/sh", "sh", "-c", ":", (const char *)0);
                /* FALLTHROUGH */
        case -1:
                write(2, "error\n", 6);
                _exit(1);
        }

        write(1, "reached\n", 8);
        return 0;
}
EOF

gcc --coverage -c prog.c
gcc --coverage -o prog prog.o
./prog
gcov prog.c

# FIXME: The code was reached one time but is reported as unreached.
grep "#####.*reached" prog.c.gcov

Reply via email to