http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51572
Richard Guenther <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jason at gcc dot gnu.org --- Comment #6 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-12-16 13:11:42 UTC --- We are creating the typedef DIE as limbo as we create it from here: /* If TYPE is a typedef type variant, let's generate debug info for the parent typedef which TYPE is a type of. */ if (typedef_variant_p (type)) { if (TREE_ASM_WRITTEN (type)) return; /* Prevent broken recursion; we can't hand off to the same type. */ gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != 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))); TREE_ASM_WRITTEN (type) = 1; gen_decl_die (TYPE_NAME (type), NULL, context_die); and the DECL_CONTEXT of the TYPE_DECL is the translation unit. Not sure why we do not immediately using such kind of context here, similar in the case of is_naming_typedef_decl () below. Thus, the following fixes it: Index: gcc/dwarf2out.c =================================================================== --- gcc/dwarf2out.c (revision 182398) +++ gcc/dwarf2out.c (working copy) @@ -18842,8 +18849,9 @@ gen_type_die_with_usage (tree type, dw_d /* 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) + if (DECL_FILE_SCOPE_P (TYPE_NAME (type)) + || (DECL_CONTEXT (TYPE_NAME (type)) + && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)) context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type))); TREE_ASM_WRITTEN (type) = 1;