@@ -1913,29 +1913,26 @@ void SwiftASTContext::AddExtraClangCC1Args(
1913
1913
GetCompilerInvocation ().getClangModuleCachePath ().str ();
1914
1914
1915
1915
// 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 ;
1925
1924
};
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;
1938
1931
}
1932
+ invocation.getFrontendOpts ().ModuleFiles .erase (
1933
+ llvm::remove_if (invocation.getFrontendOpts ().ModuleFiles ,
1934
+ [&](const auto &mod) { return !CheckFileExists (mod); }),
1935
+ invocation.getFrontendOpts ().ModuleFiles .end ());
1939
1936
1940
1937
invocation.generateCC1CommandLine (
1941
1938
[&](const llvm::Twine &arg) { dest.push_back (arg.str ()); });
0 commit comments