summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/Module.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2018-09-12 23:09:23 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2018-09-12 23:09:23 +0000
commit841dbda3ba74ee5a2daa3037d78a877900bde339 (patch)
treedaf9d4e21ae0133cd014ceb998829d8cb5cf38f9 /clang/lib/Basic/Module.cpp
parent8a478b79dc906c1f737d78fec2431dd58de646cc (diff)
downloadbcm5719-llvm-841dbda3ba74ee5a2daa3037d78a877900bde339.tar.gz
bcm5719-llvm-841dbda3ba74ee5a2daa3037d78a877900bde339.zip
When we leave a module header, make that header visible in its
includer's context, even if its overall module is unavailable. llvm-svn: 342096
Diffstat (limited to 'clang/lib/Basic/Module.cpp')
-rw-r--r--clang/lib/Basic/Module.cpp11
1 files changed, 5 insertions, 6 deletions
diff --git a/clang/lib/Basic/Module.cpp b/clang/lib/Basic/Module.cpp
index 1a0c1905905..9ff976c03b9 100644
--- a/clang/lib/Basic/Module.cpp
+++ b/clang/lib/Basic/Module.cpp
@@ -577,10 +577,6 @@ void VisibleModuleSet::setVisible(Module *M, SourceLocation Loc,
};
std::function<void(Visiting)> VisitModule = [&](Visiting V) {
- // Modules that aren't available cannot be made visible.
- if (!V.M->isAvailable())
- return;
-
// Nothing to do for a module that's already visible.
unsigned ID = V.M->getVisibilityID();
if (ImportLocs.size() <= ID)
@@ -594,8 +590,11 @@ void VisibleModuleSet::setVisible(Module *M, SourceLocation Loc,
// Make any exported modules visible.
SmallVector<Module *, 16> Exports;
V.M->getExportedModules(Exports);
- for (Module *E : Exports)
- VisitModule({E, &V});
+ for (Module *E : Exports) {
+ // Don't recurse to unavailable submodules.
+ if (E->isAvailable())
+ VisitModule({E, &V});
+ }
for (auto &C : V.M->Conflicts) {
if (isVisible(C.Other)) {
OpenPOWER on IntegriCloud