From dde17e74fa05c1c749c7ecb8ac88a3e30c953848 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 1 Nov 2013 02:19:14 +0000 Subject: [PATCH] Simplify computation of visible module set. llvm-svn: 193850 --- clang/include/clang/Basic/Module.h | 6 +++--- clang/lib/Basic/Module.cpp | 17 ++++------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/clang/include/clang/Basic/Module.h b/clang/include/clang/Basic/Module.h index 3d8b75b471f6..e8d774e1eb54 100644 --- a/clang/include/clang/Basic/Module.h +++ b/clang/include/clang/Basic/Module.h @@ -403,10 +403,10 @@ public: submodule_iterator submodule_end() { return SubModules.end(); } submodule_const_iterator submodule_end() const { return SubModules.end(); } - /// \brief Returns the exported modules based on the wildcard restrictions. + /// \brief Appends this module's list of exported modules to \p Exported. /// - /// This returns a subset of immediately imported modules (the ones that are - /// exported), not the complete set of exported modules. + /// This provides a subset of immediately imported modules (the ones that are + /// directly exported), not the complete set of exported modules. void getExportedModules(SmallVectorImpl &Exported) const; static StringRef getModuleInputBufferName() { diff --git a/clang/lib/Basic/Module.cpp b/clang/lib/Basic/Module.cpp index ccf7077d6fb8..4818e8d173cc 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 Visited; - llvm::SmallVector Exports; - SmallVector Stack(Imports.begin(), Imports.end()); + SmallVector Stack(Imports.begin(), Imports.end()); while (!Stack.empty()) { Module *CurrModule = Stack.pop_back_val(); - VisibleModulesCache.insert(CurrModule); - CurrModule->getExportedModules(Exports); - for (SmallVectorImpl::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); } }