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
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to