https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66468

Aldy Hernandez <aldyh at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jason at gcc dot gnu.org

--- Comment #5 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
Jason, this behavior exists prior to the debug-early work.

For the 1.ii/2.ii testcase in comment 4 we are generating a DIE for a
__base_dtor.  First we retrofit the declaration with force_decl_die,
and use this DIE as the basis for a DW_AT_specification variant.
Eventually dwarf2out_abstract_function() gets called on this
DW_AT_specification variant and we annotate it with DW_AT_inline.
This DW_AT_specification variant, already has location info which is
why we fail the assert.

It was my understanding that DW_AT_inline cannot appear in conjunction
with location info.

I added the check_die() code to a branch of mainline immediately
before my work, and it ICEs similarly to current mainline with a
problematic DIE of:

DIE    0: DW_TAG_subprogram (0x7ffff03885a0)
  abbrev id: 0 offset: 0 mark: 0
  DW_AT_specification: die -> 0 (0x7ffff03884b0)
  DW_AT_low_pc: label: *.LFB0
  DW_AT_high_pc: label: *.LFE0
  DW_AT_frame_base: location descriptor:
    (0x7ffff03885f0) DW_OP_call_frame_cfa 0, 0

  DW_AT_GNU_all_call_sites: 1
  DW_AT_inline: 2

Could you please take a look at this, since it is broken behavior
prior to early debug?  Perhaps it is expected behavior and we can
remove the DW_AT_inline + location check?

Reply via email to