clayborg added a comment.

So I believe the reason we need to be able to add methods to a class is for 
templates. Templates in DWARF are really poorly emitted all in the name of 
saving space. There is no full definition of template classes that get emitted, 
just a class definition with _only_ the methods that the user used in the 
current compile unit. DWARF doesn't really support emitting a templatized 
definition of a class in terms of a type T, it will always emit instantiations 
of the type T directly. So in LLDB we must create a template class like 
"std::vector<int>" and say it has no member functions, and then add each member 
function as a type specific specialization due to how the types must be created 
in the clang::ASTContext.

in one DWARF compile unit you end up having say "std::vector<int>::clear()" and 
in another you would have "std::vector<int>::erase()". In order to make the 
most complete definition of template types we need to find all 
"std::vector<int>" definitions and manually add any method that we haven't 
already seen, otherwise we end up not being able to call methods that might 
exist. Of course calling template functions is already fraught with danger 
since most are inlined if they come from the STL, but if the user asks for the 
class definition for "std::vector<int>", we should show all that we can. Can 
you make sure this patch doesn't hurt that functionality? We must have a test 
for it.

So we can't just say we will accept just one class definition if we have 
template types. Given this information, let me know what you think of your 
current patch


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D124370

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

Reply via email to