Author: akirtzidis
Date: Fri Jul 30 05:03:23 2010
New Revision: 109857

URL: http://llvm.org/viewvc/llvm-project?rev=109857&view=rev
Log:
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.

Modified:
    cfe/trunk/lib/AST/DeclBase.cpp

Modified: cfe/trunk/lib/AST/DeclBase.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclBase.cpp?rev=109857&r1=109856&r2=109857&view=diff
==============================================================================
--- cfe/trunk/lib/AST/DeclBase.cpp (original)
+++ cfe/trunk/lib/AST/DeclBase.cpp Fri Jul 30 05:03:23 2010
@@ -606,6 +606,9 @@
   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;


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to