Bug 73590 - Interrupting gcc -MD removes .d file but not .o
Summary: Interrupting gcc -MD removes .d file but not .o
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: gcc
Version: 7.3
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Jason Merrill
QA Contact: Brian Brock
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2002-09-06 13:03 UTC by Jason Merrill
Modified: 2007-04-18 16:46 UTC (History)
1 user (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2002-09-09 14:28:58 UTC
Embargoed:


Attachments (Terms of Use)

Description Jason Merrill 2002-09-06 13:03:47 UTC
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.

Comment 1 Jason Merrill 2002-09-09 14:28:51 UTC
GCC bug report filed at
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7862

Comment 2 Jason Merrill 2002-09-22 16:14:53 UTC
fixed in gcc-2.96-113 by reverting part of an earlier patch.


Note You need to log in before you can comment on or make changes to this bug.