[Lldb-commits] [lldb] 77da826 - [lldb] Make CompleteTagDeclsScope completion order deterministic
Raphael Isemann via lldb-commits
lldb-commits at lists.llvm.org
Fri Jan 10 12:19:26 PST 2020
Author: Raphael Isemann
Date: 2020-01-10T21:19:04+01:00
New Revision: 77da826edad0a7b906c734c6bee3489ef495c746
URL: https://github.com/llvm/llvm-project/commit/77da826edad0a7b906c734c6bee3489ef495c746
DIFF: https://github.com/llvm/llvm-project/commit/77da826edad0a7b906c734c6bee3489ef495c746.diff
LOG: [lldb] Make CompleteTagDeclsScope completion order deterministic
Summary:
We iterate over `m_decls_to_complete` to complete declarations. As
`m_decls_to_complete` is a set the iteration order can be non-deterministic.
The order is currently only non-deterministic when we have
a large set of decls that need to be completed (i.e. more than 32 decls,
as otherwise the SmallPtrSet is just a linear-searched list).
This doesn't really fix any specific bug or has any really observable
change in behavior as the order in which we import should not influence
any semantics. However the order we create decls/types is now always
deterministic which should make debugging easier.
Reviewers: labath, mib, shafik, davide
Reviewed By: shafik, davide
Subscribers: davide, abidh, JDevlieghere, lldb-commits, mgrang
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D72495
Added:
Modified:
lldb/source/Symbol/ClangASTImporter.cpp
Removed:
################################################################################
diff --git a/lldb/source/Symbol/ClangASTImporter.cpp b/lldb/source/Symbol/ClangASTImporter.cpp
index a10ac8a4d889..8cb404231a8d 100644
--- a/lldb/source/Symbol/ClangASTImporter.cpp
+++ b/lldb/source/Symbol/ClangASTImporter.cpp
@@ -214,7 +214,7 @@ namespace {
/// imported while completing the original Decls).
class CompleteTagDeclsScope : public ClangASTImporter::NewDeclListener {
ClangASTImporter::ImporterDelegateSP m_delegate;
- llvm::SmallPtrSet<NamedDecl *, 32> m_decls_to_complete;
+ llvm::SmallVector<NamedDecl *, 32> m_decls_to_complete;
llvm::SmallPtrSet<NamedDecl *, 32> m_decls_already_completed;
clang::ASTContext *m_dst_ctx;
clang::ASTContext *m_src_ctx;
@@ -239,10 +239,8 @@ class CompleteTagDeclsScope : public ClangASTImporter::NewDeclListener {
// Complete all decls we collected until now.
while (!m_decls_to_complete.empty()) {
- NamedDecl *decl = *m_decls_to_complete.begin();
-
+ NamedDecl *decl = m_decls_to_complete.pop_back_val();
m_decls_already_completed.insert(decl);
- m_decls_to_complete.erase(decl);
// We should only complete decls coming from the source context.
assert(to_context_md->m_origins[decl].ctx == m_src_ctx);
@@ -287,7 +285,7 @@ class CompleteTagDeclsScope : public ClangASTImporter::NewDeclListener {
// Check if we already completed this type.
if (m_decls_already_completed.count(to_named_decl) != 0)
return;
- m_decls_to_complete.insert(to_named_decl);
+ m_decls_to_complete.push_back(to_named_decl);
}
};
} // namespace
More information about the lldb-commits
mailing list