================ @@ -127,33 +127,39 @@ struct ModuleFile { std::string ModuleFilePath; }; -bool IsModuleFileUpToDate(PathRef ModuleFilePath, - const PrerequisiteModules &RequisiteModules, - llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS) { +bool IsModuleFileUpToDate( + PathRef ModuleFilePath, + const PrerequisiteModules &RequisiteModules, + const CompilerInvocation &CI, + llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS) { + CompilerInstance Clang; + Clang.setInvocation(std::make_shared<CompilerInvocation>(CI)); + IntrusiveRefCntPtr<DiagnosticsEngine> Diags = CompilerInstance::createDiagnostics(new DiagnosticOptions()); + Clang.setDiagnostics(Diags.get()); + + HeaderSearchOptions &HSOpts = Clang.getHeaderSearchOpts(); + RequisiteModules.adjustHeaderSearchOptions(HSOpts); + HSOpts.ForceCheckCXX20ModulesInputFiles = true; + HSOpts.ValidateASTInputFilesContent = true; - auto HSOpts = std::make_shared<HeaderSearchOptions>(); - RequisiteModules.adjustHeaderSearchOptions(*HSOpts); - HSOpts->ForceCheckCXX20ModulesInputFiles = true; - HSOpts->ValidateASTInputFilesContent = true; - - PCHContainerOperations PCHOperations; - std::unique_ptr<ASTUnit> Unit = ASTUnit::LoadFromASTFile( - ModuleFilePath.str(), PCHOperations.getRawReader(), ASTUnit::LoadASTOnly, - Diags, FileSystemOptions(), std::move(HSOpts), - /*LangOpts=*/nullptr, /*OnlyLocalDecls=*/false, - /*CaptureDiagnostics=*/CaptureDiagsKind::None, - /*AllowASTWithCompilerErrors=*/false, /*UserFilesAreVolatile=*/false, - VFS); - - if (!Unit) + Clang.getLangOpts().SkipODRCheckInGMF = true; + Clang.createPreprocessor(TU_Complete); + + FileManager *FM = Clang.createFileManager(VFS); + Clang.createSourceManager(*FM); + if (!Clang.createTarget()) return false; - auto Reader = Unit->getASTReader(); + auto Reader = Clang.getASTReader(); ---------------- kadircet wrote:
i think we should call `Clang.createASTReader()` first. I don't see any of the previous call creating that. https://github.com/llvm/llvm-project/pull/113879 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits