dwblaikie wrote:

> > > You can repro this by running ./bin/lldb-dotest -p 
> > > TestConstStaticIntegralMember.py --dwarf-version 5
> > > Could you take a look @ZequanWu ?
> > 
> > 
> > It should be fixed by the following diff. We just need to skip the 
> > declaration DIEs that are struct/class/union. This failure you see is 
> > caused by skipping a declaration DIE `DW_TAG_variable`.
> > ```
> > diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp 
> > b/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
> > index 56717bab1ecd..6330470b970e 100644
> > --- a/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
> > +++ b/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
> > @@ -87,7 +87,8 @@ bool DebugNamesDWARFIndex::ProcessEntry(
> >      return true;
> >    // Clang erroneously emits index entries for declaration DIEs in case 
> > when the
> >    // definition is in a type unit (llvm.org/pr77696). Weed those out.
> > -  if (die.GetAttributeValueAsUnsigned(DW_AT_declaration, 0))
> > +  if (die.IsStructUnionOrClass() &&
> > +      die.GetAttributeValueAsUnsigned(DW_AT_declaration, 0))
> >      return true;
> >    return callback(die);
> >  }
> > ```
> > 
> > 
> >     
> >       
> >     
> > 
> >       
> >     
> > 
> >     
> >   
> > Can you (or anyone with commit access) commit above fix for me? I somehow 
> > cannot pull/push from github.
> 
> Ah right, I remember encountering these `DW_AT_declaration`s in the index for 
> DWARFv5 static member variables. Technically this isn't standard conforming 
> right? I thought anything `DW_AT_declaration` shouldn't be indexed (though in 
> the case of these static variables it's very useful that they do, because we 
> don't emit definitions for these constants that the debugger could look for 
> instead). @dwblaikie @felipepiovezan Should we allow such entries in the 
> index? And does this warrant rephrasing in the DWARF spec?

At least we aren't producing that on x86 from the compiler: 
https://godbolt.org/z/ereKsasWf
```
...

0x00000029:     DW_TAG_variable
                  DW_AT_name    ("i")
                  DW_AT_type    (0x00000033 "const int")
                  DW_AT_decl_file       ("/app/example.cpp")
                  DW_AT_decl_line       (2)
                  DW_AT_external        (true)
                  DW_AT_declaration     (true)
                  DW_AT_const_value     (3)
...
```
and the `.debug_names` only includes `t1`, `main`, and `int`, nothing for `i`.

Ah, right - some of the previous context on this is 
https://github.com/llvm/llvm-project/pull/70639 (which got reverted in 
https://github.com/llvm/llvm-project/pull/74580 )- though I guess we probably 
had some discourse and dwarf workgroup discussions about how to do this that 
aren't likned from the PR... maybe it was all private chat, not sure.

https://github.com/llvm/llvm-project/pull/92328
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to