http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59512
Bug ID: 59512 Summary: Incomplete output files when compiler is killed Product: gcc Version: unknown Status: UNCONFIRMED Severity: minor Priority: P3 Component: driver Assignee: unassigned at gcc dot gnu.org Reporter: robert-gcc at debian dot org Hi When cc1plus program is killed for example by OOM then the output file (given by the `-o' option) can be incomplete, which will than result in linker error. This is especially visible when the `-pipe' option is used. I can see that clang always first create some temporary file, and then renames it into the final one: strace -efile -f clang++ a.cpp -pipe -c -o a.o [pid 28990] stat64("a.o", {st_mode=S_IFREG|0644, st_size=716, ...}) = 0 [pid 28990] access("a.o", W_OK) = 0 [pid 28990] open("/dev/urandom", O_RDONLY) = 3 [pid 28990] open("a.o-8cc52ce9", O_RDWR|O_CREAT|O_EXCL, 0666) = 3 // skipped some output [pid 28990] rename("a.o-8cc52ce9", "a.o") = 0 It would be nice if g++ could implement the same behaviour. I tried to simulate it in makefiles by using something like `g++ -o $@.tmp && mv $@.tmp $@', and it worked pretty well, unless coverage flags (`-fprofile-arcs -ftest-coverage') were also given, in which case the generated gcno/gcda files refered to the `.o.tmp' files, which generally broke the coverage calculations. For that reason I think that it would be best if g++ could handle this `write to temp && rename temp' approach internally.