diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-08-19 01:33:06 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-08-19 01:33:06 +0000 |
commit | 671947b18dba342f9aba022ee992babef325a833 (patch) | |
tree | c3a27cbfd7eeaae71811ad10d50bf597d354cea3 /lib/Frontend | |
parent | b61b7d24f3f8fee5ef7c92187d2a9bb3df5a5192 (diff) |
Plug a leak when precompiling the preamble in ASTUnit.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111504 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend')
-rw-r--r-- | lib/Frontend/ASTUnit.cpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp index 6ea48d8787..523b8d0a6c 100644 --- a/lib/Frontend/ASTUnit.cpp +++ b/lib/Frontend/ASTUnit.cpp @@ -52,7 +52,7 @@ const unsigned DefaultPreambleRebuildInterval = 5; ASTUnit::ASTUnit(bool _MainFileIsAST) : CaptureDiagnostics(false), MainFileIsAST(_MainFileIsAST), CompleteTranslationUnit(true), ConcurrencyCheckValue(CheckUnlocked), - PreambleRebuildCounter(0), SavedMainFileBuffer(0), + PreambleRebuildCounter(0), SavedMainFileBuffer(0), PreambleBuffer(0), ShouldCacheCodeCompletionResults(false), NumTopLevelDeclsAtLastCompletionCache(0), CacheCodeCompletionCoolDown(0), @@ -80,7 +80,8 @@ ASTUnit::~ASTUnit() { } delete SavedMainFileBuffer; - + delete PreambleBuffer; + ClearCachedCompletionResults(); for (unsigned I = 0, N = Timers.size(); I != N; ++I) @@ -646,8 +647,10 @@ bool ASTUnit::Parse(llvm::MemoryBuffer *OverrideMainBuffer) { delete SavedMainFileBuffer; SavedMainFileBuffer = 0; - if (!Invocation.get()) + if (!Invocation.get()) { + delete OverrideMainBuffer; return true; + } // Create the compiler instance to use for building the AST. CompilerInstance Clang; @@ -664,9 +667,11 @@ bool ASTUnit::Parse(llvm::MemoryBuffer *OverrideMainBuffer) { // Create the target instance. Clang.setTarget(TargetInfo::CreateTargetInfo(Clang.getDiagnostics(), Clang.getTargetOpts())); - if (!Clang.hasTarget()) + if (!Clang.hasTarget()) { + delete OverrideMainBuffer; return true; - + } + // Inform the target of the language options. // // FIXME: We shouldn't need to do this, the target should be immutable once @@ -773,6 +778,7 @@ error: PreprocessorOpts.remapped_file_buffer_end() - 1); PreprocessorOpts.DisablePCHValidation = true; PreprocessorOpts.ImplicitPCHInclude = PriorImplicitPCHInclude; + delete OverrideMainBuffer; } Clang.takeSourceManager(); @@ -1092,7 +1098,8 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( + NewPreamble.second.first); PreambleEndsAtStartOfLine = NewPreamble.second.second; - llvm::MemoryBuffer *PreambleBuffer + delete PreambleBuffer; + PreambleBuffer = llvm::MemoryBuffer::getNewUninitMemBuffer(PreambleReservedSize, FrontendOpts.Inputs[0].second); memcpy(const_cast<char*>(PreambleBuffer->getBufferStart()), @@ -1135,6 +1142,8 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( if (PreambleTimer) PreambleTimer->stopTimer(); PreambleRebuildCounter = DefaultPreambleRebuildInterval; + PreprocessorOpts.eraseRemappedFile( + PreprocessorOpts.remapped_file_buffer_end() - 1); return 0; } @@ -1174,7 +1183,8 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( if (PreambleTimer) PreambleTimer->stopTimer(); PreambleRebuildCounter = DefaultPreambleRebuildInterval; - + PreprocessorOpts.eraseRemappedFile( + PreprocessorOpts.remapped_file_buffer_end() - 1); return 0; } @@ -1194,6 +1204,8 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( PreambleTimer->stopTimer(); TopLevelDeclsInPreamble.clear(); PreambleRebuildCounter = DefaultPreambleRebuildInterval; + PreprocessorOpts.eraseRemappedFile( + PreprocessorOpts.remapped_file_buffer_end() - 1); return 0; } @@ -1224,6 +1236,8 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( PreambleTimer->stopTimer(); PreambleRebuildCounter = 1; + PreprocessorOpts.eraseRemappedFile( + PreprocessorOpts.remapped_file_buffer_end() - 1); return CreatePaddedMainFileBuffer(NewPreamble.first, CreatedPreambleBuffer, PreambleReservedSize, |