From: Argyrios Kyrtzidis Date: Fri, 30 Jul 2010 10:03:23 +0000 (+0000) Subject: When we are deserializing the lexical decls of a DeclContext from PCH, notify the... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0dbbc042518e6ba903dd6f815cbb8704595cc937;p=clang When we are deserializing the lexical decls of a DeclContext from PCH, notify the PCHReader to hold off passing Decls to the consumer until the DeclContext is fully prepared. Before, due to recursive loading, we could be in a situation where we would try to deserialize the decls of a DeclContext which was already doing that, and bad things would happen. In the specific case I encountered, the lexical decls would form a cycle and we would enter infinite loop territory. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109857 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp index c2cab2315a..e4ff679c04 100644 --- a/lib/AST/DeclBase.cpp +++ b/lib/AST/DeclBase.cpp @@ -606,6 +606,9 @@ DeclContext::LoadLexicalDeclsFromExternalStorage() const { ExternalASTSource *Source = getParentASTContext().getExternalSource(); assert(hasExternalLexicalStorage() && Source && "No external storage?"); + // Notify that we have a DeclContext that is initializing. + ExternalASTSource::Deserializing ADeclContext(Source); + llvm::SmallVector Decls; if (Source->FindExternalLexicalDecls(this, Decls)) return;