From 5bcb9f27d41201db8a4e7ba4c498048a50e3f7dc Mon Sep 17 00:00:00 2001 From: Jan Svoboda Date: Wed, 23 Apr 2025 13:04:54 -0700 Subject: [PATCH] [clang] Enable making the module build stack thread-safe --- clang/lib/Frontend/CompilerInstance.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index 8596dd03148e8..1526ea53add7d 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -1240,11 +1240,15 @@ std::unique_ptr CompilerInstance::cloneForModuleCompileImpl( 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(getSourceManager().getModuleBuildStack()); - SourceMgr.pushModuleBuildStack(ModuleName, - FullSourceLoc(ImportLoc, getSourceManager())); + if (ThreadSafeConfig) { + // Detecting cycles in the module graph is responsibility of the client. + } else { + // Note that this module is part of the module build stack, so that we + // can detect cycles in the module graph. + SourceMgr.setModuleBuildStack(getSourceManager().getModuleBuildStack()); + SourceMgr.pushModuleBuildStack( + ModuleName, FullSourceLoc(ImportLoc, getSourceManager())); + } // Make a copy for the new instance. Instance.FailedModules = FailedModules;