================ @@ -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