summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/Module.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2013-11-01 02:19:14 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2013-11-01 02:19:14 +0000
commitdde17e74fa05c1c749c7ecb8ac88a3e30c953848 (patch)
treef6174d58a2a6adf015217521a47dfb7dc49552e6 /clang/lib/Basic/Module.cpp
parentb9657033ccd50504021b63757b92c1e7f4e69993 (diff)
downloadbcm5719-llvm-dde17e74fa05c1c749c7ecb8ac88a3e30c953848.tar.gz
bcm5719-llvm-dde17e74fa05c1c749c7ecb8ac88a3e30c953848.zip
Simplify computation of visible module set.
llvm-svn: 193850
Diffstat (limited to 'clang/lib/Basic/Module.cpp')
-rw-r--r--clang/lib/Basic/Module.cpp19
1 files changed, 5 insertions, 14 deletions
diff --git a/clang/lib/Basic/Module.cpp b/clang/lib/Basic/Module.cpp
index ccf7077d6fb..4818e8d173c 100644
--- a/clang/lib/Basic/Module.cpp
+++ b/clang/lib/Basic/Module.cpp
@@ -253,22 +253,13 @@ void Module::buildVisibleModulesCache() const {
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);
}
}
OpenPOWER on IntegriCloud