https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117968
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- so `cpp arg1 arg2` is the same as doing `gcc -xc -E arg1 -o arg2` So I suspect this is expected behavior though I wonder if the driver could error out if arg1 does not exist before removing the output file.