jankratochvil added a comment.

In https://reviews.llvm.org/D46810#1097829, @labath wrote:

> I am not sure it's that simple. I've found at least one case 
> (`SymbolFileDWARF::ParseImportedModuleswhere we call GetFirstChild() on the 
> value returned by `GetUnitDIEOnly`


OK, that is clearly a bug there, thanks for finding it. I see some new 
assertion check would be good (I may try even a compile time check by some new 
class wrapper). `SymbolFileDWARF::ParseImportedModules` should just call 
`DIE()`.

  DWARFDIE GetUnitDIEOnly() -> DWARFDebugInfoEntry *GetUnitDIEPtrOnly() -> 
ExtractDIEsIfNeeded(true ) -> CU DIE only
  DWARFDIE        DIE    () -> DWARFDebugInfoEntry *       DIEPtr    () -> 
ExtractDIEsIfNeeded(false) -> all DIEs



> I was thinking of making this safer by changing the `GetUnitDIEOnly` so that 
> the caller has to explicitly request (either with an argument, or by 
> splitting it into two functions) whether it wants a CU die, which can be used 
> to access other DIEs, or just a bare attribute-only DIE. In second case, we 
> would return &m_first_die, in the first case &m_die_array[0] (after making 
> sure it's properly initialized).

But there is already such function, it is called `DIE()`, we need no new 
parameter. Maybe we should rename those functions, their current names are 
cryptic, what about changing the second line to:

  DWARFDIE GetUnitDIEOnly() -> DWARFDebugInfoEntry *GetUnitDIEPtrOnly() -> 
ExtractDIEsIfNeeded(true ) -> CU DIE only
  DWARFDIE GetUnitAllDIEs() -> DWARFDebugInfoEntry *GetUnitAllDIEsPtr() -> 
ExtractDIEsIfNeeded(false) -> all DIEs



> Then `m_first_die` can have `has_children` property set to false to enforce 
> that noone accesses children that way.

I would prefer an assert (or even a compilation error by some wrapper class) in 
such case but I agree this may be enough.


https://reviews.llvm.org/D46810



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to