diff options
| author | Nico Weber <nicolasweber@gmx.de> | 2008-08-10 19:20:05 +0000 |
|---|---|---|
| committer | Nico Weber <nicolasweber@gmx.de> | 2008-08-10 19:20:05 +0000 |
| commit | e4919cc2bf3f70dcff40c7eb847384c0db2b3b20 (patch) | |
| tree | 36eb24a0d4caa6f26dbf42d1b250ad24b55e05a2 | |
| parent | 0d7c6dbae8aeef69c09494ac98b61068e42a144f (diff) | |
| download | bcm5719-llvm-e4919cc2bf3f70dcff40c7eb847384c0db2b3b20.tar.gz bcm5719-llvm-e4919cc2bf3f70dcff40c7eb847384c0db2b3b20.zip | |
Do not crash with -serialize.
This happened because seralization was done in the constructor, and at that time the TranslationUnit is no longer valid.
llvm-svn: 54618
| -rw-r--r-- | clang/Driver/ASTConsumers.cpp | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/clang/Driver/ASTConsumers.cpp b/clang/Driver/ASTConsumers.cpp index 38251775d2e..ea6dc3f7651 100644 --- a/clang/Driver/ASTConsumers.cpp +++ b/clang/Driver/ASTConsumers.cpp @@ -526,16 +526,10 @@ namespace { class ASTSerializer : public ASTConsumer { protected: - TranslationUnit* TU; Diagnostic& Diags; public: - ASTSerializer(Diagnostic& diags) : TU(0), Diags(diags) {} - - virtual void InitializeTU(TranslationUnit &tu) { - TU = &tu; - } - + ASTSerializer(Diagnostic& diags) : Diags(diags) {} }; class SingleFileSerializer : public ASTSerializer { @@ -544,10 +538,10 @@ public: SingleFileSerializer(const llvm::sys::Path& F, Diagnostic& diags) : ASTSerializer(diags), FName(F) {} - ~SingleFileSerializer() { + virtual void HandleTranslationUnit(TranslationUnit& TU) { if (Diags.hasErrorOccurred()) return; - EmitASTBitcodeFile(TU, FName); + EmitASTBitcodeFile(&TU, FName); } }; @@ -557,12 +551,11 @@ public: BuildSerializer(const llvm::sys::Path& dir, Diagnostic& diags) : ASTSerializer(diags), EmitDir(dir) {} - ~BuildSerializer() { - - if (!TU || Diags.hasErrorOccurred()) + virtual void HandleTranslationUnit(TranslationUnit& TU) { + if (Diags.hasErrorOccurred()) return; - SourceManager& SourceMgr = TU->getContext().getSourceManager(); + SourceManager& SourceMgr = TU.getContext().getSourceManager(); unsigned ID = SourceMgr.getMainFileID(); assert (ID && "MainFileID not set!"); const FileEntry* FE = SourceMgr.getFileEntryForID(ID); @@ -586,7 +579,7 @@ public: sprintf(&buf[0], "%s-%llX.ast", FE->getName(), (uint64_t) FE->getInode()); FName.appendComponent(&buf[0]); - EmitASTBitcodeFile(TU, FName); + EmitASTBitcodeFile(&TU, FName); // Now emit the sources. |

