]> granicus.if.org Git - clang/commitdiff
When we are deserializing the lexical decls of a DeclContext from PCH, notify the...
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 30 Jul 2010 10:03:23 +0000 (10:03 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 30 Jul 2010 10:03:23 +0000 (10:03 +0000)
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

lib/AST/DeclBase.cpp

index c2cab2315a602f6f76b816295445aacc4ca91100..e4ff679c0419c08cbfc497b1aeeff4e70290ce25 100644 (file)
@@ -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<Decl*, 64> Decls;
   if (Source->FindExternalLexicalDecls(this, Decls))
     return;