================ @@ -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; ---------------- jansvoboda11 wrote:
In the synchronous model of implicitly-built modules, this is just being copied/moved between parent/child invocations here and in `compileModule()`: ```c++ // Propagate the failed modules to the parent instance. FailedModules = std::move(Instance.FailedModules); ``` The concurrent model I'm working towards doesn't need to actually share single `FailedModules` object across all instances. Propagating and updating the set will be done explicitly at well-defined points, again just by copying/moving the value object (if necessary). 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