public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug debug/45048]  New: duplicate DW_TAG_variable
@ 2010-07-23 17:54 tromey at gcc dot gnu dot org
  2010-07-23 21:06 ` [Bug debug/45048] " tromey at gcc dot gnu dot org
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: tromey at gcc dot gnu dot org @ 2010-07-23 17:54 UTC (permalink / raw)
  To: gcc-bugs

Consider this test case:

namespace S
{
  int i = 24;

  int f() {
    extern int i;
    return i;
  }
};


When I compile this with g++ svn head (as of a few days ago) I see a
duplicate DW_TAG_variable:

 <2><3d>: Abbrev Number: 4 (DW_TAG_variable)
    <3e>   DW_AT_name        : i        
    <40>   DW_AT_decl_file   : 1        
    <41>   DW_AT_decl_line   : 6        
    <42>   DW_AT_MIPS_linkage_name: (indirect string, offset: 0xb): _ZN1S1iE    
    <46>   DW_AT_type        : <0x5c>   
    <4a>   DW_AT_external    : 1        
    <4b>   DW_AT_declaration : 1        
 <2><4c>: Abbrev Number: 4 (DW_TAG_variable)
    <4d>   DW_AT_name        : i        
    <4f>   DW_AT_decl_file   : 1        
    <50>   DW_AT_decl_line   : 3        
    <51>   DW_AT_MIPS_linkage_name: (indirect string, offset: 0xb): _ZN1S1iE    
    <55>   DW_AT_type        : <0x5c>   
    <59>   DW_AT_external    : 1        
    <5a>   DW_AT_declaration : 1        

I think the first one is bogus, given its line number.


-- 
           Summary: duplicate DW_TAG_variable
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: tromey at gcc dot gnu dot org


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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug debug/45048] duplicate DW_TAG_variable
  2010-07-23 17:54 [Bug debug/45048] New: duplicate DW_TAG_variable tromey at gcc dot gnu dot org
@ 2010-07-23 21:06 ` tromey at gcc dot gnu dot org
  2010-07-27 10:40 ` jakub at gcc dot gnu dot org
  2010-07-27 11:14 ` jakub at gcc dot gnu dot org
  2 siblings, 0 replies; 4+ messages in thread
From: tromey at gcc dot gnu dot org @ 2010-07-23 21:06 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from tromey at gcc dot gnu dot org  2010-07-23 21:06 -------
I suppose the duplicate is due to the "i" inside of "f".
But inside of f I see:

 <2><78>: Abbrev Number: 7 (DW_TAG_lexical_block)
    <79>   DW_AT_low_pc      : 0x3      
    <7d>   DW_AT_high_pc     : 0x8      
 <3><81>: Abbrev Number: 4 (DW_TAG_variable)
    <82>   DW_AT_name        : i        
    <84>   DW_AT_decl_file   : 1        
    <85>   DW_AT_decl_line   : 6        
    <86>   DW_AT_MIPS_linkage_name: (indirect string, offset: 0xb): _ZN1S1iE    
    <8a>   DW_AT_type        : <0x5c>   
    <8e>   DW_AT_external    : 1        
    <8f>   DW_AT_declaration : 1        

I think this would be clearer if "i" were declared using DW_AT_import,
or at the very least using the outer declaration as a specification.


-- 


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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug debug/45048] duplicate DW_TAG_variable
  2010-07-23 17:54 [Bug debug/45048] New: duplicate DW_TAG_variable tromey at gcc dot gnu dot org
  2010-07-23 21:06 ` [Bug debug/45048] " tromey at gcc dot gnu dot org
@ 2010-07-27 10:40 ` jakub at gcc dot gnu dot org
  2010-07-27 11:14 ` jakub at gcc dot gnu dot org
  2 siblings, 0 replies; 4+ messages in thread
From: jakub at gcc dot gnu dot org @ 2010-07-27 10:40 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from jakub at gcc dot gnu dot org  2010-07-27 10:39 -------
One of these DW_TAG_variable DIEs at the DW_TAG_namespace scope is created
from declare_in_namespace when processing decls_for_scope of a lexical block.
The other one comes from declare_in_namespace from dwarf2out_global_decl
from wrapup_globals_for_namespace.
The problem is that the C++ FE doesn't unify externs, so the debugger sees
different decls with the same name, but different DECL_UID.
So for say
namespace N
{
  int i;
  void foo (void)
  {
    { extern int i; i++; }
    { extern int i; i++; }
    { extern int i; i++; }
    { extern int i; i++; }
  }
}
there will be 5 DW_TAG_variable DIEs in DW_TAG_namespace.


-- 

jakub at gcc dot gnu dot org changed:

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


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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug debug/45048] duplicate DW_TAG_variable
  2010-07-23 17:54 [Bug debug/45048] New: duplicate DW_TAG_variable tromey at gcc dot gnu dot org
  2010-07-23 21:06 ` [Bug debug/45048] " tromey at gcc dot gnu dot org
  2010-07-27 10:40 ` jakub at gcc dot gnu dot org
@ 2010-07-27 11:14 ` jakub at gcc dot gnu dot org
  2 siblings, 0 replies; 4+ messages in thread
From: jakub at gcc dot gnu dot org @ 2010-07-27 11:14 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from jakub at gcc dot gnu dot org  2010-07-27 11:14 -------
Perhaps a question is whether we need to actually call gen_decl_die in
declare_in_namespace if local_scope_p (context_die).  AFAIK we don't use the
DW_TAG_variable from the namespace scope in any attributes...


-- 


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


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-07-27 11:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-07-23 17:54 [Bug debug/45048] New: duplicate DW_TAG_variable tromey at gcc dot gnu dot org
2010-07-23 21:06 ` [Bug debug/45048] " tromey at gcc dot gnu dot org
2010-07-27 10:40 ` jakub at gcc dot gnu dot org
2010-07-27 11:14 ` jakub at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).