From Bugzilla Helper: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1b) Gecko/20020721 Description of problem: [from customer bug report] We are using -MD option in gcc to manage the dependency information. The problem is this, if this is interrupted by a control-c gcc promptly deletes the .d file but not any .o file that may have been existed prior to compilation. So for example, the following situation could occur: 1. foo.C depends on foo.H 2. foo.H is changed followed by a gmake 3. foo.H is changed again followed by a gmake 4. gmake is interrupted 5. .d file gets deleted 6. foo.H is changed again but doing a gmake will now do nothing The problem is that now foo.o may have a bogus object layout. Version-Release number of selected component (if applicable): All through 2.96-112 and 3.2-5 How reproducible: Always Steps to Reproduce: 1. gcc -c foo.c -MD -o foo.o 2. ls -l foo.* (notice that both foo.d and foo.o exist) 3. gcc -c foo.c -MD -o foo.o (interrupt with ^C while cc1 is running) Actual Results: foo.o exists, but foo.d does not. Expected Results: if foo.d is deleted, foo.o must be deleted as well; otherwise a makefile which relies on the contents of foo.d in order to decide when to rebuild foo.o will get the wrong answer. It might be possible to delete neither if foo.d hasn't been modified yet, but that's probably too much trouble to implement. Additional info: If -o is not used in the compile, neither foo.d nor foo.o are deleted.
GCC bug report filed at http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7862
fixed in gcc-2.96-113 by reverting part of an earlier patch.