On 03/17/2015 03:58 PM, Aldy Hernandez wrote:
The problem is that, for -fno-implicit-templates, the decl is now
DECL_EXTERNAL, which means we never equate this new "DIE with
DW_AT_specification" to the DECL.  That is, we never fall through here:

   else if (!DECL_EXTERNAL (decl))
     {
       HOST_WIDE_INT cfa_fb_offset;

       struct function *fun = DECL_STRUCT_FUNCTION (decl);

       if (!old_die || !get_AT (old_die, DW_AT_inline))
     equate_decl_number_to_die (decl, subr_die);

However, when we call gen_subprogram_die() the third time through the
outlining_inline_function hook (late debug), we again try to add a
DW_AT_specification to the DIE cached from the first time around, but
this time we ICE because we're not supposed to have multiple
DW_AT_specification's pointing to the same DIE (the old original DIE).

Why are we outlining a DECL_EXTERNAL function?

Incidentally,

          /* If we have no location information, this must be a
             partially generated DIE from early dwarf generation.
             Fall through and generate it.  */

Why aren't we checking dumped_early here?

Jason

Reply via email to