@@ -1913,29 +1913,26 @@ void SwiftASTContext::AddExtraClangCC1Args(
19131913 GetCompilerInvocation ().getClangModuleCachePath ().str ();
19141914
19151915 // Remove non-existing modules in a systematic way.
1916- bool module_missing = false ;
1917- auto CheckFileExists = [&](const char *file) {
1918- if (!llvm::sys::fs::exists (file)) {
1919- std::string warn;
1920- llvm::raw_string_ostream (warn)
1921- << " Nonexistent explicit module file " << file;
1922- AddDiagnostic (eSeverityWarning, warn);
1923- module_missing = true ;
1924- }
1916+ auto CheckFileExists = [&](const std::string &file) -> bool {
1917+ if (llvm::sys::fs::exists (file))
1918+ return true ;
1919+ std::string warn;
1920+ llvm::raw_string_ostream (warn)
1921+ << " Nonexistent explicit module file " << file;
1922+ AddDiagnostic (eSeverityWarning, warn);
1923+ return false ;
19251924 };
1926- llvm::for_each (invocation.getHeaderSearchOpts ().PrebuiltModuleFiles ,
1927- [&](const auto &mod) { CheckFileExists (mod.second .c_str ()); });
1928- llvm::for_each (invocation.getFrontendOpts ().ModuleFiles ,
1929- [&](const auto &mod) { CheckFileExists (mod.c_str ()); });
1930-
1931- // If missing, clear all the prebuilt module options and switch to implicit
1932- // modules build.
1933- if (module_missing) {
1934- invocation.getHeaderSearchOpts ().PrebuiltModuleFiles .clear ();
1935- invocation.getFrontendOpts ().ModuleFiles .clear ();
1936- invocation.getLangOpts ().ImplicitModules = true ;
1937- invocation.getHeaderSearchOpts ().ImplicitModuleMaps = true ;
1925+ for (auto it = invocation.getHeaderSearchOpts ().PrebuiltModuleFiles .begin ();
1926+ it != invocation.getHeaderSearchOpts ().PrebuiltModuleFiles .end ();) {
1927+ if (!CheckFileExists (it->second ))
1928+ it = invocation.getHeaderSearchOpts ().PrebuiltModuleFiles .erase (it);
1929+ else
1930+ ++it;
19381931 }
1932+ invocation.getFrontendOpts ().ModuleFiles .erase (
1933+ llvm::remove_if (invocation.getFrontendOpts ().ModuleFiles ,
1934+ [&](const auto &mod) { return !CheckFileExists (mod); }),
1935+ invocation.getFrontendOpts ().ModuleFiles .end ());
19391936
19401937 invocation.generateCC1CommandLine (
19411938 [&](const llvm::Twine &arg) { dest.push_back (arg.str ()); });
0 commit comments