When provided with a spurious filename on the command line, ld updates the output file's timestamp even if compilation fails. Re-invoking make consequently produces a message that the target is up to date.
Consider two files: ldtest.h (empty, not included), and ldtest.C: $ cat ldtest.C int main( int argc, char *argv[] ) { return 0; } Build it, ruin the source, build it (fails), build it again (succeeds): $ make ldtest.borked c++ -o ldtest.borked ldtest.C ldtest.h $ make break <ldtest.C sed 's/return/r eturn/' > ldtest.c mv ldtest.c ldtest.C $ make ldtest.borked c++ -o ldtest.borked ldtest.C ldtest.h ldtest.C: In function int main(int, char**): ldtest.C:4: error: r was not declared in this scope ldtest.C:4: error: expected `;' before eturn make: *** [ldtest.borked] Error 1 $ make ldtest.borked make: `ldtest.borked' is up to date. $ stat ldtest.C ldtest.borked | grep -E 'ldtest|Change' File: `ldtest.C' Change: 2010-09-03 12:56:18.140130000 -0400 File: `ldtest.borked' Change: 2010-09-03 12:56:24.168658000 -0400 If ldtest.h is not on the command line, the binary is not updated: $ make fix <ldtest.C sed 's/r eturn/return/' > ldtest.c mv ldtest.c ldtest.C $ make ldtest c++ -o ldtest ldtest.C $ make break <ldtest.C sed 's/return/r eturn/' > ldtest.c mv ldtest.c ldtest.C $ make ldtest c++ -o ldtest ldtest.C ldtest.C: In function int main(int, char**): ldtest.C:4: error: r was not declared in this scope ldtest.C:4: error: expected `;' before eturn make: *** [ldtest] Error 1 $ make ldtest c++ -o ldtest ldtest.C ldtest.C: In function int main(int, char**): ldtest.C:4: error: r was not declared in this scope ldtest.C:4: error: expected `;' before eturn make: *** [ldtest] Error 1 $ stat ldtest.C ldtest | grep -E 'ldtest|Change' File: `ldtest.C' Change: 2010-09-03 13:05:18.469643000 -0400 File: `ldtest' Change: 2010-09-03 13:05:15.407893000 -0400 $ ld -V GNU ld version 2.17.50.0.6-6.el5 20061020 Supported emulations: elf_x86_64 elf_i386 i386linux While one might argue GIGO, this is an easy mistake to make. I submit ld should make every effort not to produce invalid binaries, and in this case it discards information from the compiler. -- Summary: ld updates output timestamp even when compiler fails Product: binutils Version: 2.17 Status: NEW Severity: normal Priority: P2 Component: binutils AssignedTo: unassigned at sources dot redhat dot com ReportedBy: jklowden at schemamania dot org CC: bug-binutils at gnu dot org GCC target triplet: elf_x86_64 http://sourceware.org/bugzilla/show_bug.cgi?id=11977 ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-binutils