aeubanks added inline comments.

================
Comment at: 
lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp:1558-1560
+            if (template_param_infos.hasParameterPack()) {
+              args = template_param_infos.packed_args->args;
+            }
----------------
dblaikie wrote:
> I think there's some existing problems with lldb here (& gdb, as it happens) 
> - this doesn't specify where the parameter pack is in the argument list 
> (looks like it assumes it's the only template parameters?) - and doesn't 
> handle the possibility of multiple parameter packs in a single parameter 
> list, which I think is possible in some corner cases.
> 
> I think maybe the existing lldb code can handle some non-pack parameters 
> followed by a single pack, but this code assumes it's either non-pack or a 
> pack, never both - so might be more restrictive than the existing 
> limitations? But maybe not - I might've misread/misremembered the other lldb 
> code.
you're right, fixed to check both, and added test case


================
Comment at: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp:1585
+          DWARFDIE parent_decl_ctx_die = die.GetParentDeclContextDIE();
+          // TODO: change this to get the correct decl context parent....
+          while (parent_decl_ctx_die) {
----------------
Michael137 wrote:
> dblaikie wrote:
> > What's incorrect about it at the moment?
> > 
> > Oh, I see this code has just moved around.
> Why move this into `ParseStructureLikeDIE`? Just to remove the need for a 
> mutable `std::string&` param? I guess access to `die`? Might be easier to 
> review (and maintain) as a helper function still
so that we have access to `ParseTemplateParameterInfos`, which calls 
`ParseTemplateDIE` which creates clang types and stuffs them into 
`TemplateParameterInfos`, which we use to create the template parameters string.

moved into helper function


================
Comment at: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:2498-2501
+        llvm::StringRef qualNameTemplateParams =
+            qualName.slice(it, qualName.size());
+        if (templateParams != qualNameTemplateParams)
+          return true;
----------------
dblaikie wrote:
> And this checks the stringified template params match exactly - so there's 
> opportunity for improvement in the future to compare with more fuzzy matching 
> (I guess we can't use clang's AST because that'd involve making two instances 
> of the type somehow which doesn't make a lot of sense) so that users don't 
> have to spell the template spec exactly the same way clang does (eg: `x<int, 
> int>` versus `x<int,int>` - or other more complicated situations with 
> function pointers, parentheses, casts, etc.
lldb already requires exact name matching when looking up classes

e.g.
```
$ cat /tmp/a.cc
template<class T>struct Foo {};
int main() {
        Foo<int> a;
        Foo<long> b;
        Foo<float> c;
}
template<class T>struct Foo {};
int main() {
        Foo<int> a;
        Foo<long> b;
        Foo<float> c;
}
~/repos/llvm-project/build/cmake$ ./bin/lldb /tmp/a
(lldb) target create "/tmp/a"
Current executable set to '/tmp/a' (x86_64).
(lldb) im loo -t 'Foo< int>'
(lldb) im loo -t 'Foo<int>'
1 match found in /tmp/a:
id = {0x00000058}, name = "Foo<int>", byte-size = 1, decl = a.cc:1, 
compiler_type = "template<> struct Foo<int> {
}"
```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D134378/new/

https://reviews.llvm.org/D134378

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to