[PCH] Mark a PCH file with a flag to indicate if the serialized AST had
compiler errors or not. -Control whether ASTReader should reject such a PCH by a boolean flag at ASTReader's creation time. By default, such a PCH file will be rejected with an error when trying to load it. [libclang] Allow clang_saveTranslationUnit to create a PCH file even if compiler errors occurred. -Have libclang API calls accept a PCH that had compiler errors. The general idea is that we want libclang to stay functional even if a PCH had a compiler error. rdar://10976363. llvm-svn: 152192
This commit is contained in:
@@ -306,12 +306,14 @@ void CompilerInstance::createASTContext() {
|
||||
void CompilerInstance::createPCHExternalASTSource(StringRef Path,
|
||||
bool DisablePCHValidation,
|
||||
bool DisableStatCache,
|
||||
bool AllowPCHWithCompilerErrors,
|
||||
void *DeserializationListener){
|
||||
OwningPtr<ExternalASTSource> Source;
|
||||
bool Preamble = getPreprocessorOpts().PrecompiledPreambleBytes.first != 0;
|
||||
Source.reset(createPCHExternalASTSource(Path, getHeaderSearchOpts().Sysroot,
|
||||
DisablePCHValidation,
|
||||
DisableStatCache,
|
||||
AllowPCHWithCompilerErrors,
|
||||
getPreprocessor(), getASTContext(),
|
||||
DeserializationListener,
|
||||
Preamble));
|
||||
@@ -324,6 +326,7 @@ CompilerInstance::createPCHExternalASTSource(StringRef Path,
|
||||
const std::string &Sysroot,
|
||||
bool DisablePCHValidation,
|
||||
bool DisableStatCache,
|
||||
bool AllowPCHWithCompilerErrors,
|
||||
Preprocessor &PP,
|
||||
ASTContext &Context,
|
||||
void *DeserializationListener,
|
||||
@@ -331,7 +334,8 @@ CompilerInstance::createPCHExternalASTSource(StringRef Path,
|
||||
OwningPtr<ASTReader> Reader;
|
||||
Reader.reset(new ASTReader(PP, Context,
|
||||
Sysroot.empty() ? "" : Sysroot.c_str(),
|
||||
DisablePCHValidation, DisableStatCache));
|
||||
DisablePCHValidation, DisableStatCache,
|
||||
AllowPCHWithCompilerErrors));
|
||||
|
||||
Reader->setDeserializationListener(
|
||||
static_cast<ASTDeserializationListener *>(DeserializationListener));
|
||||
|
||||
Reference in New Issue
Block a user