https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86452
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |ASSIGNED CC| |dodji at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org --- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- It looks like the error is simply that /* If type is an anonymous tagged type named by a typedef, let's generate debug info for the typedef. */ if (is_naming_typedef_decl (TYPE_NAME (type))) { /* Use the DIE of the containing namespace as the parent DIE of the type description DIE we want to generate. */ if (DECL_CONTEXT (TYPE_NAME (type)) && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL) context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type))); is using get_context_die rather than context_die = scope_die_for (type, context_die); which fixes the ICE. I believe the conditional can also be elided but that could be a separate thing to test (testcase also works). The above was introduced with r160347. Thus I am testing the following: Index: gcc/dwarf2out.c =================================================================== --- gcc/dwarf2out.c (revision 262551) +++ gcc/dwarf2out.c (working copy) @@ -25378,11 +25378,8 @@ gen_type_die_with_usage (tree type, dw_d generate debug info for the typedef. */ if (is_naming_typedef_decl (TYPE_NAME (type))) { - /* Use the DIE of the containing namespace as the parent DIE of - the type description DIE we want to generate. */ - if (DECL_CONTEXT (TYPE_NAME (type)) - && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL) - context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type))); + /* Give typedefs the right scope. */ + context_die = scope_die_for (type, context_die); gen_decl_die (TYPE_NAME (type), NULL, NULL, context_die); return;