[Bug lto/63546] ICE: Segmentation fault in lto_get_decl_name_mapping on ppc64
hubicka at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Oct 16 15:13:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63546
Jan Hubicka <hubicka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2014-10-16
CC| |ccoutant at google dot com,
| |jakub at redhat dot com,
| |jason at redhat dot com
Ever confirmed|0 |1
--- Comment #3 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
OK, the problem seems to be that dwarf2out tries to produce RTL for a variable
that is optimized out. This happens here:
/* Try harder to get a rtl. If this symbol ends up not being emitted
in the current CU, resolve_addr will remove the expression referencing
it. */
if (rtl == NULL_RTX
&& TREE_CODE (decl) == VAR_DECL
&& !DECL_EXTERNAL (decl)
&& TREE_STATIC (decl)
&& DECL_NAME (decl)
&& !DECL_HARD_REGISTER (decl)
&& DECL_MODE (decl) != VOIDmode)
{
rtl = make_decl_rtl_for_debug (decl);
if (!MEM_P (rtl)
|| GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
|| SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
rtl = NULL_RTX;
}
producing RTL brings the function in, because it wants to work out its section
that breaks. I do not think dwarf2out really needs RTL for variable that was
never output.
Shall we kludge around and make make_decl_rtl-for_debug to not ICE but return
sort of random RTL or shall we just prevent this path with reference_to_unused
check?
For Martin and Trevor, I think safe workaround is to just comment out this
path.
More information about the Gcc-bugs
mailing list