tonkosi added inline comments.
================
Comment at: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:3281-3282
if ((parent_tag == DW_TAG_compile_unit ||
- parent_tag == DW_TAG_partial_unit) &&
+ parent_tag == DW_TAG_partial_unit ||
+ parent_tag == DW_TAG_namespace) &&
Language::LanguageIsCPlusPlus(GetLanguage(*die.GetCU())))
----------------
clayborg wrote:
> I think we should just always call this function in regardless of what the
> parent variable tag is since what happens if the parent tag is another value
> decl context like DW_TAG_class_type, DW_TAG_structure_type?
>
> The call to GetDWARFDeclContext(die) below will calculate the
> DWARFDeclContext for a DIE and then construct an appropriate qualified name,
> so we can just always do this so I would suggest just making this:
>
> ```
> if (Language::LanguageIsCPlusPlus(GetLanguage(*die.GetCU())))
> mangled =
> GetDWARFDeclContext(die).GetQualifiedNameAsConstString().GetCString();
> ```
> Then we should always get this right all the time. It doesn't actually make
> sense to call this if the parent is the DW_TAG_compile_unit or
> DW_TAG_partial_unit because then there is no decl context to add to the
> variable name.
I tried to call `GetDWARFDeclContext(die)` in a general case, but it seems that
`GetQualifiedName` will append `::`
([source](https://github.com/llvm/llvm-project/blob/5015f250894d3d97917d858850fae7960923a4ae/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.cpp#L22))
in front of the variable name if there's no other declaration context.
As a result, LLDB will display local variables and function arguments as
`::var`. Any suggestion to deal with that?
I also noticed that with the current change it would be possible to get
variables in anonymous namespaces, e.g. for the following source
```
namespace ns {
namespace {
const int var = 1;
}
}
```
call to `SBTarget::FindGlobalVariables("ns::(anonymous namespace)::var")` will
succeed. Is that OK?
================
Comment at: lldb/test/API/lang/cpp/global_variables/main.cpp:5
+int g_file_global_int = 42;
+const int g_file_global_const_int = 1337;
}
----------------
clayborg wrote:
> might be nice to see if we can create constants inside of a class or struct
> as well as mentioned in the above inline comment
I couldn't come up with a struct or class example that triggers changes in this
diff. Members were either `DW_TAG_member` which is not handled by
`ParseVariableDIE` or they already contained `DW_AT_linkage_name`.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D112147/new/
https://reviews.llvm.org/D112147
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits