================ @@ -1206,82 +1198,70 @@ createCompilerInstanceForModuleCompileImpl(CompilerInstance &ImportingInstance, DiagnosticOptions &DiagOpts = Invocation->getDiagnosticOpts(); DiagOpts.VerifyDiagnostics = 0; - assert(ImportingInstance.getInvocation().getModuleHash() == - Invocation->getModuleHash() && "Module hash mismatch!"); + assert(getInvocation().getModuleHash() == Invocation->getModuleHash() && + "Module hash mismatch!"); // Construct a compiler instance that will be used to actually create the // module. Since we're sharing an in-memory module cache, // CompilerInstance::CompilerInstance is responsible for finalizing the // buffers to prevent use-after-frees. auto InstancePtr = std::make_unique<CompilerInstance>( - ImportingInstance.getPCHContainerOperations(), - &ImportingInstance.getModuleCache()); + getPCHContainerOperations(), &getModuleCache()); auto &Instance = *InstancePtr; auto &Inv = *Invocation; Instance.setInvocation(std::move(Invocation)); Instance.createDiagnostics( - ImportingInstance.getVirtualFileSystem(), - new ForwardingDiagnosticConsumer(ImportingInstance.getDiagnosticClient()), + getVirtualFileSystem(), + new ForwardingDiagnosticConsumer(getDiagnosticClient()), /*ShouldOwnClient=*/true); if (llvm::is_contained(DiagOpts.SystemHeaderWarningsModules, ModuleName)) Instance.getDiagnostics().setSuppressSystemWarnings(false); if (FrontendOpts.ModulesShareFileManager) { - Instance.setFileManager(&ImportingInstance.getFileManager()); + Instance.setFileManager(&getFileManager()); } else { - Instance.createFileManager(&ImportingInstance.getVirtualFileSystem()); + Instance.createFileManager(&getVirtualFileSystem()); } Instance.createSourceManager(Instance.getFileManager()); SourceManager &SourceMgr = Instance.getSourceManager(); // Note that this module is part of the module build stack, so that we // can detect cycles in the module graph. - SourceMgr.setModuleBuildStack( - ImportingInstance.getSourceManager().getModuleBuildStack()); + SourceMgr.setModuleBuildStack(getSourceManager().getModuleBuildStack()); SourceMgr.pushModuleBuildStack(ModuleName, - FullSourceLoc(ImportLoc, ImportingInstance.getSourceManager())); + FullSourceLoc(ImportLoc, getSourceManager())); - // Make sure that the failed-module structure has been allocated in - // the importing instance, and propagate the pointer to the newly-created - // instance. - if (!ImportingInstance.hasFailedModulesSet()) - ImportingInstance.createFailedModulesSet(); - Instance.setFailedModulesSet(ImportingInstance.getFailedModulesSetPtr()); + // Make a copy for the new instance. + Instance.FailedModules = FailedModules; ---------------- Bigcheese wrote:
Does this mean that after a split that other compiler instances won't know about a failed module? This feels like something that needs to be made actually thread safe when shared, although I'm not sure about the full consequences of this given that we generally exit early on module build failure. https://github.com/llvm/llvm-project/pull/135473 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits