Simplify computation of visible module set.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@193850 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Basic/Module.cpp b/lib/Basic/Module.cpp
index ccf7077..4818e8d 100644
--- a/lib/Basic/Module.cpp
+++ b/lib/Basic/Module.cpp
@@ -253,22 +253,13 @@
VisibleModulesCache.insert(this);
// Every imported module is visible.
- // Every module exported by an imported module is visible.
- llvm::SmallPtrSet<Module *, 4> Visited;
- llvm::SmallVector<Module *, 4> Exports;
- SmallVector<Module *, 4> Stack(Imports.begin(), Imports.end());
+ SmallVector<Module *, 16> Stack(Imports.begin(), Imports.end());
while (!Stack.empty()) {
Module *CurrModule = Stack.pop_back_val();
- VisibleModulesCache.insert(CurrModule);
- CurrModule->getExportedModules(Exports);
- for (SmallVectorImpl<Module *>::iterator I = Exports.begin(),
- E = Exports.end();
- I != E; ++I) {
- Module *Exported = *I;
- if (Visited.insert(Exported))
- Stack.push_back(Exported);
- }
+ // Every module transitively exported by an imported module is visible.
+ if (VisibleModulesCache.insert(CurrModule).second)
+ CurrModule->getExportedModules(Stack);
}
}