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),
}
delete SavedMainFileBuffer;
-
+ delete PreambleBuffer;
+
ClearCachedCompletionResults();
for (unsigned I = 0, N = Timers.size(); I != N; ++I)
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;
// 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
PreprocessorOpts.remapped_file_buffer_end() - 1);
PreprocessorOpts.DisablePCHValidation = true;
PreprocessorOpts.ImplicitPCHInclude = PriorImplicitPCHInclude;
+ delete OverrideMainBuffer;
}
Clang.takeSourceManager();
+ 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()),
if (PreambleTimer)
PreambleTimer->stopTimer();
PreambleRebuildCounter = DefaultPreambleRebuildInterval;
+ PreprocessorOpts.eraseRemappedFile(
+ PreprocessorOpts.remapped_file_buffer_end() - 1);
return 0;
}
if (PreambleTimer)
PreambleTimer->stopTimer();
PreambleRebuildCounter = DefaultPreambleRebuildInterval;
-
+ PreprocessorOpts.eraseRemappedFile(
+ PreprocessorOpts.remapped_file_buffer_end() - 1);
return 0;
}
PreambleTimer->stopTimer();
TopLevelDeclsInPreamble.clear();
PreambleRebuildCounter = DefaultPreambleRebuildInterval;
+ PreprocessorOpts.eraseRemappedFile(
+ PreprocessorOpts.remapped_file_buffer_end() - 1);
return 0;
}
PreambleTimer->stopTimer();
PreambleRebuildCounter = 1;
+ PreprocessorOpts.eraseRemappedFile(
+ PreprocessorOpts.remapped_file_buffer_end() - 1);
return CreatePaddedMainFileBuffer(NewPreamble.first,
CreatedPreambleBuffer,
PreambleReservedSize,