diff --git a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h --- a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h +++ b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h @@ -32,12 +32,14 @@ struct PrebuiltModuleDep { std::string ModuleName; std::string PCMFile; - std::string ModuleMapFile; + Optional ModuleMapFile; explicit PrebuiltModuleDep(const Module *M) : ModuleName(M->getTopLevelModuleName()), PCMFile(M->getASTFile()->getName()), - ModuleMapFile(M->PresumedModuleMapFile) {} + ModuleMapFile(M->PresumedModuleMapFile.empty() + ? None + : Optional(M->PresumedModuleMapFile)) {} }; /// This is used to identify a specific module. diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp @@ -39,7 +39,8 @@ for (const PrebuiltModuleDep &PMD : PrebuiltModuleDeps) { Args.push_back("-fmodule-file=" + PMD.ModuleName + "=" + PMD.PCMFile); - Args.push_back("-fmodule-map-file=" + PMD.ModuleMapFile); + if (PMD.ModuleMapFile) + Args.push_back("-fmodule-map-file=" + *PMD.ModuleMapFile); } return Args; diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp --- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -35,7 +35,9 @@ // Report the prebuilt modules this module uses. for (const auto &PrebuiltModule : Deps.PrebuiltModuleDeps) { CI.getFrontendOpts().ModuleFiles.push_back(PrebuiltModule.PCMFile); - CI.getFrontendOpts().ModuleMapFiles.push_back(PrebuiltModule.ModuleMapFile); + if (PrebuiltModule.ModuleMapFile) + CI.getFrontendOpts().ModuleMapFiles.push_back( + *PrebuiltModule.ModuleMapFile); } CI.getPreprocessorOpts().ImplicitPCHInclude.clear();