The only way errorJobs ever gets filled is by engine.c
around line 680 with a snippet that reads
if (!keepgoing) {
if (!silent)
printf("\n");
job->next = errorJobs;
errorJobs = job;
/* XXX don't free the command */
return;
}
Index: job.c
===================================================================
RCS file: /cvs/src/usr.bin/make/job.c,v
retrieving revision 1.144
diff -u -p -r1.144 job.c
--- job.c 31 Dec 2019 13:59:14 -0000 1.144
+++ job.c 4 Jan 2020 12:14:50 -0000
@@ -546,8 +547,7 @@ postprocess_job(Job *job)
} else if (job->exit_type != JOB_EXIT_OKAY && keepgoing)
free(job);
- if (errorJobs != NULL && !keepgoing &&
- aborting != ABORT_INTERRUPT)
+ if (errorJobs != NULL && aborting != ABORT_INTERRUPT)
aborting = ABORT_ERROR;
if (aborting == ABORT_ERROR && DEBUG(QUICKDEATH))