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 <[email protected]>
* 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