This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [debug-early] equate new DIE with DW_AT_specificationto a previous declaration


On 03/17/2015 07:12 PM, Jason Merrill wrote:
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?

SRA is analyzing Object<int>::Method() and noticing that `this' is never used, so it's trying to rewrite the call to avoid passing `this' (by creating a clone).

SRA has no restrictions on whether a function is DECL_EXTERNAL. For that matter, the SRA pass is called on all functions that have a gimple body, irregardless of DECL_EXTERNAL, courtesy of the pass manager:

          if (node->has_gimple_body_p ())
            callback (DECL_STRUCT_FUNCTION (node->decl), data);

...and since Object<int>::Method() has a gimple body even though it is marked DECL_EXTERNAL...we get the call into dwarf2out_abstract_decl.


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?

Good point.  I'll add an assert.

Aldy


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]