diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-09-12 23:09:23 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-09-12 23:09:23 +0000 |
commit | 841dbda3ba74ee5a2daa3037d78a877900bde339 (patch) | |
tree | daf9d4e21ae0133cd014ceb998829d8cb5cf38f9 /clang/lib/Basic/Module.cpp | |
parent | 8a478b79dc906c1f737d78fec2431dd58de646cc (diff) | |
download | bcm5719-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.cpp | 11 |
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)) { |