------- Comment #4 from jason at redhat dot com  2008-10-17 15:18 -------
Subject: Re:  DWARF output for inlined functions doesn't
 always use DW_TAG_inlined_subroutine

These bits should not be generated:

  <2><8c>: Abbrev Number: 8 (DW_TAG_lexical_block)
  <3><8d>: Abbrev Number: 8 (DW_TAG_lexical_block)
  <4><8e>: Abbrev Number: 9 (DW_TAG_variable)
     <8f>   DW_AT_abstract_origin: <0x46>
  <4><93>: Abbrev Number: 9 (DW_TAG_variable)
     <94>   DW_AT_abstract_origin: <0x51>
....
  <2><bf>: Abbrev Number: 8 (DW_TAG_lexical_block)
  <3><c0>: Abbrev Number: 8 (DW_TAG_lexical_block)
  <4><c1>: Abbrev Number: 9 (DW_TAG_variable)
     <c2>   DW_AT_abstract_origin: <0x81>
  <4><c6>: Abbrev Number: 8 (DW_TAG_lexical_block)
  <5><c7>: Abbrev Number: 8 (DW_TAG_lexical_block)
  <6><c8>: Abbrev Number: 9 (DW_TAG_variable)
     <c9>   DW_AT_abstract_origin: <0x46>
  <6><cd>: Abbrev Number: 9 (DW_TAG_variable)
     <ce>   DW_AT_abstract_origin: <0x51>

Basically, when we're generating the debug info for the abstract 
instance of an inline function we shouldn't emit any information about 
other inline functions, as it would be redundant.  We shouldn't see any 
DW_AT_abstract_origin attributes inside a DW_TAG_subprogram with 
DW_AT_inline set.

Incidentally, it seems that we're also emitting these unnecessary 
DW_TAG_lexical_block inside the concrete instances 
(DW_TAG_inlined_subroutine): For instance,

  <3><1a5>: Abbrev Number: 14 (DW_TAG_lexical_block)
     <1a6>   DW_AT_low_pc      : 0x40046f
     <1ae>   DW_AT_high_pc     : 0x400479

should be dropped, and

  <4><1b6>: Abbrev Number: 9 (DW_TAG_variable)
     <1b7>   DW_AT_abstract_origin: <0x81>

should be at level 3, directly under the DW_TAG_inlined_subroutine.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37801

Reply via email to