[Bug debug/85176] [8 Regression] ICE in force_decl_die, at dwarf2out.c:25910
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Apr 4 10:31:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85176
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P1
Target Milestone|--- |8.0
Summary|ICE in force_decl_die, at |[8 Regression] ICE in
|dwarf2out.c:25910 |force_decl_die, at
| |dwarf2out.c:25910
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
In the end caused by -g1 not generating DIEs for NAMESPACE_DECLs. At
compile-time
the DIEs are rooted at comp_unit_die () but LTO expects to re-generate the
DIE child->parent relationship via DECL/TYPE_CONTEXT, we do not stream that
(because DIEs lack a back-mapping to the tree it was generated off, rightfully
so).
So we have to mimick that in dwarf2out_register_external_die.
Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c (revision 259069)
+++ gcc/dwarf2out.c (working copy)
@@ -5903,8 +5903,13 @@ dwarf2out_register_external_die (tree de
}
else
ctx = DECL_CONTEXT (decl);
+ /* Peel types in the context stack. */
while (ctx && TYPE_P (ctx))
ctx = TYPE_CONTEXT (ctx);
+ /* Likewise namespaces in case we do not want to emit DIEs for them. */
+ if (debug_info_level <= DINFO_LEVEL_TERSE)
+ while (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
+ ctx = DECL_CONTEXT (ctx);
if (ctx)
{
if (TREE_CODE (ctx) == BLOCK)
More information about the Gcc-bugs
mailing list