diff options
Diffstat (limited to 'clang/lib/Basic/Module.cpp')
-rw-r--r-- | clang/lib/Basic/Module.cpp | 19 |
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); } } |