https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120513
--- Comment #33 from Greg Chandler <chandleg at wizardsworks dot org> --- for (n_commands = 1, i = 0; argbuf.iterate (i, &arg); i++) fprintf (stdout, "%d: %s\n", i, argbuf[0]); With the following inside the following if: if (arg && strcmp (arg, "|") == 0) fprintf (stdout, "%d: %s#%s\n", foobar, commands[n_commands].prog, commands[n_commands].argv); Yields: root@bigbang:/tmp# mount /dev/sdc1 /mnt ; /mnt/gcc 1.c ; umount /mnt 0: cc1 1: cc1 2: cc1 3: cc1 4: cc1 5: cc1 6: cc1 7: cc1 8: cc1 9: cc1 10: cc1 11: cc1 12: cc1 13: cc1 14: cc1 gcc: fatal error: cannot execute1 'cc1': posix_spawnp: No such file or directory compilation terminated. So what we see is 15 iterations of the loop: for (n_commands = 1, i = 0; argbuf.iterate (i, &arg); i++) But Not a single match on the if statement looking for a pipe, which I guess is a good thing at the moment. I numbered all the "cannnot execute" errors as well, to help trace that down, and this is exiting from the same function (execute): if (errmsg != NULL) { errno = err; fatal_error (input_location, err ? G_("cannot execute1 %qs: %s: %m") : G_("cannot execute2 %qs: %s"), string, errmsg); } So I'm going to start working backwards from here, and see what that yields.