On Sun, Jan 2, 2011 at 1:18 PM, Ian Lance Taylor <i...@google.com> wrote: > Richard Guenther <richard.guent...@gmail.com> writes: > >> On Sun, Jan 2, 2011 at 9:24 PM, Ian Lance Taylor <i...@google.com> wrote: >>> Richard Guenther <richard.guent...@gmail.com> writes: >>> >>>> Your small patch removing have_o || is ok I guess. >>> >>> Wait. That will change the behaviour of >>> gcc -o foo.o -c f1.c f2.c f3.c >>> Is that what we want? >> >> Does it? I don't think so. Most of the combine handling was removed by >> the patch that caused the regression, so -o and -c doesn't combine anymore >> (with multiple sources). > > Sorry, you're right. The difference is that @c has 0 for the combinable > field, and @assembler has 1. Before H.J.'s change, this worked > gcc -c -o f.o f1.s f2.s > After his change, it does not. That is probably not a big deal. > > I wonder why @assembler has 1 for combinable? It seems to have been set > to 1 when the combinable field was added in 2004-04-05 with -combine. > Now that -combine has been removed, if the combinable field for > @assembler were 0, it seems to me that H.J.'s problem would also be > fixed. And it seems to me that it should be 0. > > >>> Also, right now the gccgo driver depends on the -o behaviour to combine >>> inputs. If that changes, the driver will need to provide some other way >>> to let the frontend force inputs to be combined. >> >> For go it isn't equivalent to do gcgo -c t1.go; gcgo -c t2.go; gcgo t1.o t2.o >> compared to gcgo t1.go t2.go? > > No, it is not. All .go input files must be passed to go1 at once. > H.J.'s patch has indeed broken gccgo. >
Can you try this patch? Thanks. -- H.J. --- diff --git a/gcc/gcc.c b/gcc/gcc.c index 0d633a4..d0b2c96 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -6582,7 +6582,20 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A P ARTICULAR PURPOSE.\n\n" explicit_link_files = XCNEWVEC (char, n_infiles); + /* Check if we should combine inputs. */ combine_inputs = flag_wpa; + if (!combine_inputs) + for (i = 1; i < decoded_options_count; i++) + { + if (decoded_options[i].opt_index == OPT_x) + { + struct compiler *compiler + = lookup_compiler (NULL, 0, decoded_options[i].arg); + if (compiler) + combine_inputs = compiler->combinable; + break; + } + } for (i = 0; (int) i < n_infiles; i++) {