@@ -136,6 +136,7 @@ makeTransitiveImportsVisible(ASTContext &Ctx, VisibleModuleSet &VisibleModules,
136136 " modules only." );
137137
138138 llvm::SmallVector<Module *, 4 > Worklist;
139+ llvm::SmallSet<Module *, 16 > Visited;
139140 Worklist.push_back (Imported);
140141
141142 Module *FoundPrimaryModuleInterface =
@@ -144,18 +145,22 @@ makeTransitiveImportsVisible(ASTContext &Ctx, VisibleModuleSet &VisibleModules,
144145 while (!Worklist.empty ()) {
145146 Module *Importing = Worklist.pop_back_val ();
146147
147- if (VisibleModules. isVisible (Importing))
148+ if (Visited. count (Importing))
148149 continue ;
150+ Visited.insert (Importing);
149151
150152 // FIXME: The ImportLoc here is not meaningful. It may be problematic if we
151153 // use the sourcelocation loaded from the visible modules.
152154 VisibleModules.setVisible (Importing, ImportLoc);
153155
154156 if (isImportingModuleUnitFromSameModule (Ctx, Importing, CurrentModule,
155- FoundPrimaryModuleInterface))
157+ FoundPrimaryModuleInterface)) {
156158 for (Module *TransImported : Importing->Imports )
157- if (!VisibleModules.isVisible (TransImported))
158- Worklist.push_back (TransImported);
159+ Worklist.push_back (TransImported);
160+
161+ for (auto [Exports, _] : Importing->Exports )
162+ Worklist.push_back (Exports);
163+ }
159164 }
160165}
161166
0 commit comments