https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61268
Rainer Orth <ro at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target|sparc-sun-solaris2.11 |sparc-sun-solaris2.1[01] CC| |rsandifo at gcc dot gnu.org Host|sparc-sun-solaris2.11 |sparc-sun-solaris2.1[01] Build|sparc-sun-solaris2.11 |sparc-sun-solaris2.1[01] --- Comment #1 from Rainer Orth <ro at gcc dot gnu.org> --- Richard, a reghunt has confirmed that this regression was caused by this patch: 2014-05-17 Richard Sandiford <rdsandif...@googlemail.com> * emit-rtl.h (replace_equiv_address, replace_equiv_address_nv): Add an inplace argument. Store the new address in the original MEM when true. * emit-rtl.c (change_address_1): Likewise. (adjust_address_1, adjust_automodify_address_1, offset_address): Update accordingly. * rtl.h (plus_constant): Add an inplace argument. * explow.c (plus_constant): Likewise. Try to reuse the original PLUS when true. Avoid generating (plus X (const_int 0)). * function.c (instantiate_virtual_regs_in_rtx): Adjust the PLUS in-place. Pass true to plus_constant. (instantiate_virtual_regs_in_insn): Pass true to replace_equiv_address. I'm attaching the preprocessed testcase. The failure can be reproduced with cc1 -fpreprocessed limits-fndefn.i -quiet -g -O3 -o limits-fndefn.s Haven't tried in a cross compiler, though. Rainer