================
@@ -993,6 +1000,28 @@ bool ModuleDepCollector::isPrebuiltModule(const Module 
*M) {
   return true;
 }
 
+void ModuleDepCollector::addVisibleModules() {
+  llvm::DenseSet<Module *> ImportedModules;
+  auto InsertVisibleModules = [&](const Module *M) {
+    if (ImportedModules.contains(M))
+      return;
+
+    VisibleModules.insert(M->getTopLevelModuleName());
+    SmallVector<Module *> Stack(M->Imports.begin(), M->Imports.end());
+    while (!Stack.empty()) {
+      Module *CurrModule = Stack.pop_back_val();
+      if (ImportedModules.contains(CurrModule))
+        continue;
+      ImportedModules.insert(CurrModule);
+      VisibleModules.insert(CurrModule->getTopLevelModuleName());
----------------
jansvoboda11 wrote:

With the way `Stack` gets initialized, this adds all imports unconditionally, 
which is not the semantics "visible modules" have in the rest of the compiler. 
Is that really intentional? I verified the normal current behavior by doing 
this before calling `MDC.addVisibleModules()`:

```c++
  auto PrintIfVisible = [this](const Module *Mod) {
    if 
(MDC.ScanInstance.getPreprocessor().CurSubmoduleState->VisibleModules.isVisible(Mod))
      llvm::errs() << "  " << Mod->getFullModuleName() << "\n";
  };

  llvm::errs() << "Visible modules:\n";
  for (const auto &[Name, Mod] : 
MDC.ScanInstance.getPreprocessor().getHeaderSearchInfo().getModuleMap().modules())
 {
    PrintIfVisible(Mod);
    for (auto SubMod : Mod->submodules())
      PrintIfVisible(SubMod);
  }
```

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

Reply via email to