diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-10-28 07:38:45 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-10-28 07:38:45 +0000 |
commit | 4729972c0f8a54504466bd212a8ee5e1826c681b (patch) | |
tree | 16c9b5b8453a8a471a3906d50e0a578a82fcc7e4 /clang/lib/Serialization/ASTWriter.cpp | |
parent | 402dbbbd66b1fadcff52b86ab80804554fa8d05e (diff) | |
download | bcm5719-llvm-4729972c0f8a54504466bd212a8ee5e1826c681b.tar.gz bcm5719-llvm-4729972c0f8a54504466bd212a8ee5e1826c681b.zip |
Fix the re-serializing decls in a chained PCH mechanism.
llvm-svn: 117534
Diffstat (limited to 'clang/lib/Serialization/ASTWriter.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 3589b9bd990..3e7667404d5 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -2395,10 +2395,6 @@ void ASTWriter::WriteASTCore(Sema &SemaRef, MemorizeStatCalls *StatCalls, else WriteDecl(Context, DOT.getDecl()); } - for (DeclsToRewriteTy::iterator - I = DeclsToRewrite.begin(), E = DeclsToRewrite.end(); I != E; ++I) { - WriteDecl(Context, const_cast<Decl*>(*I)); - } Stream.ExitBlock(); WritePreprocessor(PP); @@ -2604,6 +2600,9 @@ void ASTWriter::WriteASTChain(Sema &SemaRef, MemorizeStatCalls *StatCalls, Stream.EnterSubblock(DECLTYPES_BLOCK_ID, 3); WriteDeclsBlockAbbrevs(); + for (DeclsToRewriteTy::iterator + I = DeclsToRewrite.begin(), E = DeclsToRewrite.end(); I != E; ++I) + DeclTypesToEmit.push(const_cast<Decl*>(*I)); while (!DeclTypesToEmit.empty()) { DeclOrType DOT = DeclTypesToEmit.front(); DeclTypesToEmit.pop(); @@ -3287,7 +3286,7 @@ void ASTWriter::CompletedTagDefinition(const TagDecl *D) { // A forward reference was mutated into a definition. Rewrite it. // FIXME: This happens during template instantiation, should we // have created a new definition decl instead ? - DeclsToRewrite.insert(RD); + RewriteDecl(RD); } for (CXXRecordDecl::redecl_iterator |