https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64231
--- Comment #7 from Sandra Loosemore <sandra at codesourcery dot com> ---
Hmmmm. I'm not sure why there's trouble in reproducing the failure, but
looking at this some more, it seems like we have a problem with this code
fragment from force_const_mem in varasm.c:
/* If we're not allowed to drop X into the constant pool, don't. */
if (targetm.cannot_force_const_mem (mode, x))
return NULL_RTX;
and the code at the call site in plus_constant in explow.c:
tem = force_const_mem (GET_MODE (x), tem);
if (memory_address_p (GET_MODE (tem), XEXP (tem, 0)))
return tem;
which is clearly not expecting force_const_mem to return null. Guarding the
reference in the conditional like
if (tem && memory_address_p (GET_MODE (tem), XEXP (tem, 0))) ...
fixes the SEGV, but a quick look shows that there are a lot of other uses of
force_const_mem that expect it to return a non-null value, with no checking.
So, probably this has nothing to do with the specific change in r217852, but
has been a lurking bug for a long time, and it needs more than a band-aid on
this one particular call site.