https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63837
--- Comment #7 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- (In reply to Manuel López-Ibáñez from comment #6) > Thanks for the testcase. It seems that the GCC_COMPARE_DEBUG=0 uses a > temporary file > > ./cc1 -quiet -iprefix > /home/manuel/test1/217394M/build/gcc/../lib/gcc/x86_64-unknown-linux-gnu/5.0. > 0/ -isystem ./include -isystem ./include-fixed /dev/null -quiet -dumpbase > null "-mtune=generic" "-march=x86-64" -auxbase null -Wpointer-sign > "-fcompare-debug=-gtoggle" "-frandom-seed=0x6daada6b94b95048" > "-fdump-final-insns=/tmp/cc3xSGvK.gkd" -o /tmp/cc3L00jg.s > > but the GCC_COMPARE_DEBUG=1 uses /dev/null: > > ./cc1 -quiet -iprefix > /home/manuel/test1/217394M/build/gcc/../lib/gcc/x86_64-unknown-linux-gnu/5.0. > 0/ -isystem ./include -isystem ./include-fixed /dev/null -quiet -dumpbase > null.gk "-mtune=generic" "-march=x86-64" -auxbase null -gtoggle > -Wpointer-sign -w "-fcompare-debug=-gtoggle" -fcompare-debug-second -o > /dev/null "-frandom-seed=0x6daada6b94b95048" > "-fdump-final-insns=/tmp/ccMDEp8L.gk.gkd" > > which triggers the heuristic. I can simply ignore /dev/null when checking > for input==output. I'm testing this patch: > > Index: gcc.c > =================================================================== > --- gcc.c (revision 217457) > +++ gcc.c (working copy) > @@ -4047,11 +4047,12 @@ process_command (unsigned int decoded_op > read_cmdline_option (&global_options, &global_options_set, > decoded_options + j, UNKNOWN_LOCATION, > CL_DRIVER, &handlers, global_dc); > } > > - if (output_file && strcmp (output_file, "-")) > + if (output_file && strcmp (output_file, "-") > + && strcmp (output_file, HOST_BIT_BUCKET)) > { > int i; > for (i = 0; i < n_infiles; i++) > if ((!infiles[i].language || infiles[i].language[0] != '*') > && canonical_filename_eq (infiles[i].name, output_file)) > Index: toplev.c > =================================================================== > --- toplev.c (revision 217457) > +++ toplev.c (working copy) > @@ -940,11 +940,12 @@ init_asm_output (const char *name) > strcat (dumpname, ".s"); > asm_file_name = dumpname; > } > if (!strcmp (asm_file_name, "-")) > asm_out_file = stdout; > - else if (!canonical_filename_eq (asm_file_name, name)) > + else if (!canonical_filename_eq (asm_file_name, name) > + || !strcmp (asm_file_name, HOST_BIT_BUCKET)) > asm_out_file = fopen (asm_file_name, "w"); > else > /* Use fatal_error (UNKOWN_LOCATION) instead of just fatal_error to > prevent gcc from printing the first line in the current file. */ > fatal_error (UNKNOWN_LOCATION, > > If you can test it on your side, it would be helpful. Your patch fixes the issue. Thank you.