/// file within the precompiled preamble.
unsigned PreambleReservedSize;
+ /// \brief When non-NULL, this is the buffer used to store the contents of
+ /// the main file when it has been padded for use with the precompiled
+ /// preamble.
+ llvm::MemoryBuffer *SavedMainFileBuffer;
+
ASTUnit(const ASTUnit&); // DO NOT IMPLEMENT
ASTUnit &operator=(const ASTUnit &); // DO NOT IMPLEMENT
ASTUnit::ASTUnit(bool _MainFileIsAST)
: CaptureDiagnostics(false), MainFileIsAST(_MainFileIsAST),
- ConcurrencyCheckValue(CheckUnlocked) { }
+ ConcurrencyCheckValue(CheckUnlocked), SavedMainFileBuffer(0) { }
ASTUnit::~ASTUnit() {
ConcurrencyCheckValue = CheckLocked;
++FB)
delete FB->second;
}
+
+ delete SavedMainFileBuffer;
}
void ASTUnit::CleanTemporaryFiles() {
/// \returns True if a failure occurred that causes the ASTUnit not to
/// contain any translation-unit information, false otherwise.
bool ASTUnit::Parse(llvm::MemoryBuffer *OverrideMainBuffer) {
+ delete SavedMainFileBuffer;
+ SavedMainFileBuffer = 0;
+
if (!Invocation.get())
return true;
= PreambleEndsAtStartOfLine;
PreprocessorOpts.ImplicitPCHInclude = PreambleFile.str();
PreprocessorOpts.DisablePCHValidation = true;
+
+ // Keep track of the override buffer;
+ SavedMainFileBuffer = OverrideMainBuffer;
}
llvm::OwningPtr<TopLevelDeclTrackerAction> Act;
if (!AST->Parse(OverrideMainBuffer))
return AST.take();
- delete OverrideMainBuffer;
return 0;
}
// Parse the sources
bool Result = Parse(OverrideMainBuffer);
- delete OverrideMainBuffer;
return Result;
}