diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Frontend/CompilerInstance.cpp | 11 | ||||
-rw-r--r-- | clang/lib/Frontend/FrontendAction.cpp | 1 | ||||
-rw-r--r-- | clang/lib/Frontend/FrontendActions.cpp | 21 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 10 |
4 files changed, 28 insertions, 15 deletions
diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index d8381a824c7..d1211801253 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -292,14 +292,12 @@ void CompilerInstance::createASTContext() { void CompilerInstance::createPCHExternalASTSource(StringRef Path, bool DisablePCHValidation, bool AllowPCHWithCompilerErrors, - bool AllowConfigurationMismatch, void *DeserializationListener){ OwningPtr<ExternalASTSource> Source; bool Preamble = getPreprocessorOpts().PrecompiledPreambleBytes.first != 0; Source.reset(createPCHExternalASTSource(Path, getHeaderSearchOpts().Sysroot, DisablePCHValidation, AllowPCHWithCompilerErrors, - AllowConfigurationMismatch, getPreprocessor(), getASTContext(), DeserializationListener, Preamble, @@ -313,7 +311,6 @@ CompilerInstance::createPCHExternalASTSource(StringRef Path, const std::string &Sysroot, bool DisablePCHValidation, bool AllowPCHWithCompilerErrors, - bool AllowConfigurationMismatch, Preprocessor &PP, ASTContext &Context, void *DeserializationListener, @@ -324,7 +321,8 @@ CompilerInstance::createPCHExternalASTSource(StringRef Path, Sysroot.empty() ? "" : Sysroot.c_str(), DisablePCHValidation, AllowPCHWithCompilerErrors, - AllowConfigurationMismatch, + /*AllowConfigurationMismatch*/false, + /*ValidateSystemInputs*/false, UseGlobalModuleIndex)); Reader->setDeserializationListener( @@ -333,9 +331,7 @@ CompilerInstance::createPCHExternalASTSource(StringRef Path, Preamble ? serialization::MK_Preamble : serialization::MK_PCH, SourceLocation(), - AllowConfigurationMismatch - ? ASTReader::ARR_ConfigurationMismatch - : ASTReader::ARR_None)) { + ASTReader::ARR_None)) { case ASTReader::Success: // Set the predefines buffer as suggested by the PCH reader. Typically, the // predefines buffer will be empty. @@ -1165,6 +1161,7 @@ CompilerInstance::loadModule(SourceLocation ImportLoc, PPOpts.DisablePCHValidation, /*AllowASTWithCompilerErrors=*/false, /*AllowConfigurationMismatch=*/false, + /*ValidateSystemInputs=*/false, getFrontendOpts().UseGlobalModuleIndex); if (hasASTConsumer()) { ModuleManager->setDeserializationListener( diff --git a/clang/lib/Frontend/FrontendAction.cpp b/clang/lib/Frontend/FrontendAction.cpp index 13a0787e427..0baf3e5e1fb 100644 --- a/clang/lib/Frontend/FrontendAction.cpp +++ b/clang/lib/Frontend/FrontendAction.cpp @@ -314,7 +314,6 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI, CI.getPreprocessorOpts().ImplicitPCHInclude, CI.getPreprocessorOpts().DisablePCHValidation, CI.getPreprocessorOpts().AllowPCHWithCompilerErrors, - /*AllowConfigurationMismatch*/false, DeserialListener); if (!CI.getASTContext().getExternalSource()) goto failure; diff --git a/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp index 8b174605ffd..27124ca8487 100644 --- a/clang/lib/Frontend/FrontendActions.cpp +++ b/clang/lib/Frontend/FrontendActions.cpp @@ -326,11 +326,22 @@ ASTConsumer *VerifyPCHAction::CreateASTConsumer(CompilerInstance &CI, } void VerifyPCHAction::ExecuteAction() { - getCompilerInstance(). - createPCHExternalASTSource(getCurrentFile(), /*DisablePCHValidation*/false, - /*AllowPCHWithCompilerErrors*/false, - /*AllowConfigurationMismatch*/true, - /*DeserializationListener*/0); + CompilerInstance &CI = getCompilerInstance(); + bool Preamble = CI.getPreprocessorOpts().PrecompiledPreambleBytes.first != 0; + const std::string &Sysroot = CI.getHeaderSearchOpts().Sysroot; + OwningPtr<ASTReader> Reader(new ASTReader( + CI.getPreprocessor(), CI.getASTContext(), + Sysroot.empty() ? "" : Sysroot.c_str(), + /*DisableValidation*/false, + /*AllowPCHWithCompilerErrors*/false, + /*AllowConfigurationMismatch*/true, + /*ValidateSystemInputs*/true)); + + Reader->ReadAST(getCurrentFile(), + Preamble ? serialization::MK_Preamble + : serialization::MK_PCH, + SourceLocation(), + ASTReader::ARR_ConfigurationMismatch); } namespace { diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 4d2a4008888..96d40440096 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -1831,9 +1831,13 @@ ASTReader::ReadControlBlock(ModuleFile &F, // Validate all of the non-system input files. if (!DisableValidation) { bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0; - // All user input files reside at the index range [0, Record[1]). + // All user input files reside at the index range [0, Record[1]), and + // system input files reside at [Record[1], Record[0]). // Record is the one from INPUT_FILE_OFFSETS. - for (unsigned I = 0, N = Record[1]; I < N; ++I) { + unsigned NumInputs = Record[0]; + unsigned NumUserInputs = Record[1]; + unsigned N = ValidateSystemInputs ? NumInputs : NumUserInputs; + for (unsigned I = 0; I < N; ++I) { InputFile IF = getInputFile(F, I+1, Complain); if (!IF.getFile() || IF.isOutOfDate()) return OutOfDate; @@ -7620,6 +7624,7 @@ ASTReader::ASTReader(Preprocessor &PP, ASTContext &Context, StringRef isysroot, bool DisableValidation, bool AllowASTWithCompilerErrors, bool AllowConfigurationMismatch, + bool ValidateSystemInputs, bool UseGlobalIndex) : Listener(new PCHValidator(PP, *this)), DeserializationListener(0), SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()), @@ -7628,6 +7633,7 @@ ASTReader::ASTReader(Preprocessor &PP, ASTContext &Context, isysroot(isysroot), DisableValidation(DisableValidation), AllowASTWithCompilerErrors(AllowASTWithCompilerErrors), AllowConfigurationMismatch(AllowConfigurationMismatch), + ValidateSystemInputs(ValidateSystemInputs), UseGlobalIndex(UseGlobalIndex), TriedLoadingGlobalIndex(false), CurrentGeneration(0), CurrSwitchCaseStmts(&SwitchCaseStmts), NumSLocEntriesRead(0), TotalNumSLocEntries(0), |