Red Hat Bugzilla – Bug 73590
Interrupting gcc -MD removes .d file but not .o
Last modified: 2007-04-18 12:46:25 EDT
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
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.
If -o is not used in the compile, neither foo.d nor foo.o are deleted.
GCC bug report filed at
fixed in gcc-2.96-113 by reverting part of an earlier patch.