zequanwu added a comment. In D113930#3174406 <https://reviews.llvm.org/D113930#3174406>, @labath wrote:
> I still think that the piecemeal addition of member functions is a problem. > While I don't think that changing the parsing order in > `Module::ParseAllDebugSymbols` would be a problem (that function is only > called from lldb-test), I think that would only hide the problem. Looking at > what happens in the DWARF case, I /think/ (the code is fairly messy, so I > could be wrong) that we don't create a clang ast representation for the > function in `ParseFunctions`. We only create an lldb_private::Function (in > `DWARFASTParserClang::ParseFunctionFromDWARF`). The ast entity only gets > created in `SymbolFileDWARF::ParseTypes` > (->ParseType->DWARFASTParserClang->ParseTypeFromDWARF). This kinda makes > sense since we only need the ast representation of the method when we start > dealing its class. From what I tested on dwarf plugin, `lldb-test symbols -dump-ast ` doesn't print any ast decl, except a skeleton class decl. After adding some logs at (https://github.com/llvm/llvm-project/blob/main/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp#L1026), it doesn't get executed. $ lldb-test symbols -dump-ast ast-methods.exe Module: ast-methods.exe struct Struct; Nevertheless I think it works in dwarf because it creates the decls if die is `DW_TAG_subprogram`/`DW_TAG_inlined_subroutine `/`DW_TAG_subroutine_type ` (https://github.com/llvm/llvm-project/blob/main/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp#L522). We can associate a decl with a die. But we can't associate a type record with a decl when parsing type stream in PDB. > So I have a feeling that the real solution here is to avoid creating an ast > entry for the function in the first phase. Then you should be able to create > the full class declaration in the second phase, as you will have complete > information there. If we don't create ast entries at `ParseFunctions`, non-class-member functions will not have ast decls. If we just create ast decls for non-class-member functions in `ParseFunctions`, we are expecting that `ParseTypes` is always called after `ParseFunctions` to complete the decl creation for member functions, which is not right. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D113930/new/ https://reviews.llvm.org/D113930 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits