@@ -1152,7 +1152,8 @@ static Language getLanguageFromOptions(const LangOptions &LangOpts) {
11521152
11531153std::unique_ptr<CompilerInstance> CompilerInstance::cloneForModuleCompileImpl (
11541154 SourceLocation ImportLoc, StringRef ModuleName, FrontendInputFile Input,
1155- StringRef OriginalModuleMapFile, StringRef ModuleFileName) {
1155+ StringRef OriginalModuleMapFile, StringRef ModuleFileName,
1156+ IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS) {
11561157 // Construct a compiler invocation for creating this module.
11571158 auto Invocation = std::make_shared<CompilerInvocation>(getInvocation ());
11581159
@@ -1212,19 +1213,21 @@ std::unique_ptr<CompilerInstance> CompilerInstance::cloneForModuleCompileImpl(
12121213 auto &Inv = *Invocation;
12131214 Instance.setInvocation (std::move (Invocation));
12141215
1216+ if (VFS) {
1217+ Instance.createFileManager (std::move (VFS));
1218+ } else if (FrontendOpts.ModulesShareFileManager ) {
1219+ Instance.setFileManager (&getFileManager ());
1220+ } else {
1221+ Instance.createFileManager (&getVirtualFileSystem ());
1222+ }
1223+
12151224 Instance.createDiagnostics (
1216- getVirtualFileSystem (),
1225+ Instance. getVirtualFileSystem (),
12171226 new ForwardingDiagnosticConsumer (getDiagnosticClient ()),
12181227 /* ShouldOwnClient=*/ true );
1219-
12201228 if (llvm::is_contained (DiagOpts.SystemHeaderWarningsModules , ModuleName))
12211229 Instance.getDiagnostics ().setSuppressSystemWarnings (false );
12221230
1223- if (FrontendOpts.ModulesShareFileManager ) {
1224- Instance.setFileManager (&getFileManager ());
1225- } else {
1226- Instance.createFileManager (&getVirtualFileSystem ());
1227- }
12281231 Instance.createSourceManager (Instance.getFileManager ());
12291232 SourceManager &SourceMgr = Instance.getSourceManager ();
12301233
@@ -1318,7 +1321,8 @@ static OptionalFileEntryRef getPublicModuleMap(FileEntryRef File,
13181321}
13191322
13201323std::unique_ptr<CompilerInstance> CompilerInstance::cloneForModuleCompile (
1321- SourceLocation ImportLoc, Module *Module, StringRef ModuleFileName) {
1324+ SourceLocation ImportLoc, Module *Module, StringRef ModuleFileName,
1325+ IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS) {
13221326 StringRef ModuleName = Module->getTopLevelModuleName ();
13231327
13241328 InputKind IK (getLanguageFromOptions (getLangOpts ()), InputKind::ModuleMap);
@@ -1363,7 +1367,8 @@ std::unique_ptr<CompilerInstance> CompilerInstance::cloneForModuleCompile(
13631367 return cloneForModuleCompileImpl (
13641368 ImportLoc, ModuleName,
13651369 FrontendInputFile (ModuleMapFilePath, IK, IsSystem),
1366- ModMap.getModuleMapFileForUniquing (Module)->getName (), ModuleFileName);
1370+ ModMap.getModuleMapFileForUniquing (Module)->getName (), ModuleFileName,
1371+ std::move (VFS));
13671372 }
13681373
13691374 // FIXME: We only need to fake up an input file here as a way of
@@ -1380,7 +1385,8 @@ std::unique_ptr<CompilerInstance> CompilerInstance::cloneForModuleCompile(
13801385 auto Instance = cloneForModuleCompileImpl (
13811386 ImportLoc, ModuleName,
13821387 FrontendInputFile (FakeModuleMapFile, IK, +Module->IsSystem ),
1383- ModMap.getModuleMapFileForUniquing (Module)->getName (), ModuleFileName);
1388+ ModMap.getModuleMapFileForUniquing (Module)->getName (), ModuleFileName,
1389+ std::move (VFS));
13841390
13851391 std::unique_ptr<llvm::MemoryBuffer> ModuleMapBuffer =
13861392 llvm::MemoryBuffer::getMemBufferCopy (InferredModuleMapContent);
0 commit comments