Hui added inline comments.
================ Comment at: source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp:588 + if (result->GetID() == type_uid) { + pdb->CompleteRecordTypeForPDBSymbol(*pdb_type, result); + } ---------------- aleksandr.urakov wrote: > What are the advantages and disadvantages of immediate (here) and deferred > (at the `CompleteType` function) completions? I thought that deferred > completion is a kind of lazy optimization, so we lost its advantages? I think the initial purpose was that the 'incomplete' can be detected immediately after 'first' parsing and then solved immediately. The deferred type completion can encounter a drawback (maybe be worked around by using lock) a. the deferred procedure could happen during the 'm_types' (TypeList)" dumping b. the deferred output could add new types to the 'm_types'. c. see below. The dump implementation of TypeList. It will result in undefined behavior if a list is expanded while accessing it with iterator. void TypeList::Dump(Stream *s, bool show_context) { for (iterator pos = m_types.begin(), end = m_types.end(); pos != end; ++pos) { pos->get()->Dump(s, show_context); } } In this sense, https://reviews.llvm.org/D49368 has a better solution. https://reviews.llvm.org/D49410 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits