================
@@ -65,11 +66,25 @@ static void optimizeHeaderSearchOpts(HeaderSearchOptions 
&Opts,
     llvm::DenseSet<const serialization::ModuleFile *> Visited;
     std::function<void(const serialization::ModuleFile *)> VisitMF =
         [&](const serialization::ModuleFile *MF) {
-          VFSUsage |= MF->VFSUsage;
           Visited.insert(MF);
-          for (const serialization::ModuleFile *Import : MF->Imports)
-            if (!Visited.contains(Import))
-              VisitMF(Import);
+          if (MF->Kind == serialization::MK_ImplicitModule) {
+            VFSUsage |= MF->VFSUsage;
+            // We only need to recurse into implicit modules. Other module 
types
+            // will have the correct set of VFSs for anything they depend on.
+            for (const serialization::ModuleFile *Import : MF->Imports)
+              if (!Visited.contains(Import))
+                VisitMF(Import);
+          } else {
+            // This is not an implicitly built module, so it may have different
+            // VFS options. Fall back to a string comparison instead.
+            auto VFSMap = PrebuiltModuleVFSMap.find(MF->FileName);
+            if (VFSMap == PrebuiltModuleVFSMap.end())
+              return;
----------------
Bigcheese wrote:

I think it's also possible that you used an explicit module in the original 
driver command, or prebuilt module path. The idea of silently ignoring unknown 
modules here was to preserve the existing behavior of ignoring them. I would 
eventually like to make this an error, but doing this works in most cases now, 
so I don't want to do that yet. It would probably be good to make it a warning 
in this patch though, I don't expect this return to fire unless something weird 
is going on.

https://github.com/llvm/llvm-project/pull/82294
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to