[Lldb-commits] [PATCH] D54670: .debug_types: Update of D32167 on top of D51578 (.debug_types section concatenation)

Jan Kratochvil via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Sat Nov 17 15:12:35 PST 2018


jankratochvil added inline comments.


================
Comment at: source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp:268
+          if (decl_ctx)
+            LinkDeclContextToDIE(decl_ctx, die);
+          return type_sp;
----------------
I have added these 4 lines - `decl_ctx` copy - which fixes the `-fdebug-types-section` regression [[ https://reviews.llvm.org/D51578#1294416 | described before ]] as:

There is a `_dwarf` -> `_dwarf_type_units` regression for: `-f TestCppTypeLookup.test_namespace_only_dwarf_type_units`
```
./bin/clang -o 1 ../llvm-git/tools/lldb/packages/Python/lldbsuite/test/lang/cpp/type_lookup/main.cpp -g -fdebug-types-section;./bin/lldb -o 'settings set target.experimental.inject-local-vars false' -o 'target create "./1"' -o 'b 66' -o r -o 'p *((in_contains_type *)&i)'
```
Expected:
```(lldb) p *((in_contains_type *)&i)
error: use of undeclared identifier 'in_contains_type'
error: expected expression
```
Actual:
```(lldb) p *((in_contains_type *)&i)
(in_contains_type) $0 = (aaa = 123)
```

The regression was due to `DWARFASTParserClang::GetClangDeclContextForDIE` calling `ResolveType` but then still `GetCachedClangDeclContextForDIE` was returning NULL `decl_ctx`.  That was because in this code above the recursive `ParseTypeFromDWARF` call properly did set `LinkDeclContextToDIE` but only for the referenced DIE, not for the referring DIE.  But then the caller asked for DeclContext of the referring DIE which has not been found.

```
  Compilation Unit @ offset 0x84:
   Signature:     0x368b3ff5e79ee8d1
 <0><9b>: Abbrev Number: 1 (DW_TAG_type_unit)
 <1><a2>: Abbrev Number: 2 (DW_TAG_namespace)
    <a3>   DW_AT_name        : (indirect string, offset: 0x149): nsp_a
 <2><a7>: Abbrev Number: 6 (DW_TAG_structure_type)
HERE: Referenced DIE.
    <a9>   DW_AT_name        : (indirect string, offset: 0x169): contains_type
  Compilation Unit @ offset 0xb2:
   Signature:     0xb27591880ea58868
 <0><c9>: Abbrev Number: 1 (DW_TAG_type_unit)
 <1><d0>: Abbrev Number: 2 (DW_TAG_namespace)
    <d1>   DW_AT_name        : (indirect string, offset: 0x149): nsp_a
 <2><d5>: Abbrev Number: 7 (DW_TAG_structure_type)
HERE: Referring DIE.
    <d6>   DW_AT_declaration : 1
    <d6>   DW_AT_signature   : signature: 0x368b3ff5e79ee8d1
 <3><de>: Abbrev Number: 3 (DW_TAG_structure_type)
    <e0>   DW_AT_name        : (indirect string, offset: 0x166): in_contains_type
 <4><e7>: Abbrev Number: 4 (DW_TAG_member)
    <e8>   DW_AT_name        : (indirect string, offset: 0x177): aaa
```


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D54670





More information about the lldb-commits mailing list