Michael137 wrote:

Huh this is an interesting one. So it looks like we first parse and insert 
`struct Inner` into `UniqueDWARFASTTypeMap` as a forward declaration. Then when 
we search the debug-map for the definition of `Inner`, we find it declared as 
`class Inner` (note, *class* vs. *struct*...i.e., the DIE tags don't match), 
and fail to find the entry in said map. So we end up not calling 
`StartTagDeclarationDefinition` by the time we get to `CompleteType`, and hence 
we assert.

If i hack those to align all is well:
```
(lldb) n                                                                        
                         
Process 61300 stopped                                                           
                         
* thread #1, queue = 'com.apple.main-thread', stop reason = step over           
                         
    frame #0: 0x00000001204bd8f8 
liblldb.19.0.0git.dylib`lldb_private::plugin::dwarf::UniqueDWARFASTTypeList::Find(this=0x0000000107bceb28,
 die=0x000000016fdfa428, decl=0x000000016fdf98b0, byte_size=4, is_forward_d
eclaration=false) at UniqueDWARFASTType.cpp:21:9                                
                         
   18       const int32_t byte_size, bool is_forward_declaration) {             
                         
   19     for (UniqueDWARFASTType &udt : m_collection) {                        
                         
   20       // Make sure the tags match                                         
                                                                                
                                                      
-> 21       if (udt.m_die.Tag() == die.Tag()) {                                 
                         
   22         // If they are not both definition DIEs or both declaration DIEs, 
then                     
   23         // don't check for byte size and declaration location, because 
declaration                 
   24         // DIEs usually don't have those info.                            
                                                                                
                                                      
Target 0: (lldb) stopped.                                                    
(lldb) p udt.m_die.Tag()                                                     
(dw_tag_t) DW_TAG_structure_type                                             
(lldb) p die.Tag()                                                           
(dw_tag_t) DW_TAG_class_type                                                 
(lldb) p die.m_die->m_tag = (llvm::dwarf::Tag)0x0013
(dw_tag_t) DW_TAG_structure_type                    
(lldb) c                                             
Process 61300 resuming                               
(D::Inner &) inner_d = 0x000000010000400c (j = 68)   
(lldb) Process 61300 exited with status = 0 (0x00000000) 
```

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