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