[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