forked from OSchip/llvm-project
[modules] If local submodule visibility is disabled, don't bother checking
whether the owning module of a hidden declaration is visible -- it can't be. llvm-svn: 245822
This commit is contained in:
parent
79bf920552
commit
5196a17d3c
|
@ -1410,22 +1410,22 @@ bool Sema::hasVisibleDefaultArgument(const NamedDecl *D,
|
|||
/// your module can see, including those later on in your module).
|
||||
bool LookupResult::isVisibleSlow(Sema &SemaRef, NamedDecl *D) {
|
||||
assert(D->isHidden() && "should not call this: not in slow case");
|
||||
Module *DeclModule = SemaRef.getOwningModule(D);
|
||||
if (!DeclModule) {
|
||||
// getOwningModule() may have decided the declaration should not be hidden.
|
||||
assert(!D->isHidden() && "hidden decl not from a module");
|
||||
return true;
|
||||
}
|
||||
|
||||
// If the owning module is visible, and the decl is not module private,
|
||||
// then the decl is visible too. (Module private is ignored within the same
|
||||
// top-level module.)
|
||||
if (!D->isFromASTFile() || !D->isModulePrivate()) {
|
||||
if (SemaRef.isModuleVisible(DeclModule))
|
||||
Module *DeclModule = nullptr;
|
||||
|
||||
if (SemaRef.getLangOpts().ModulesLocalVisibility) {
|
||||
DeclModule = SemaRef.getOwningModule(D);
|
||||
if (!DeclModule) {
|
||||
// getOwningModule() may have decided the declaration should not be hidden.
|
||||
assert(!D->isHidden() && "hidden decl not from a module");
|
||||
return true;
|
||||
// Also check merged definitions.
|
||||
if (SemaRef.getLangOpts().ModulesLocalVisibility &&
|
||||
SemaRef.hasVisibleMergedDefinition(D))
|
||||
}
|
||||
|
||||
// If the owning module is visible, and the decl is not module private,
|
||||
// then the decl is visible too. (Module private is ignored within the same
|
||||
// top-level module.)
|
||||
if ((!D->isFromASTFile() || !D->isModulePrivate()) &&
|
||||
(SemaRef.isModuleVisible(DeclModule) ||
|
||||
SemaRef.hasVisibleMergedDefinition(D)))
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1457,6 +1457,11 @@ bool LookupResult::isVisibleSlow(Sema &SemaRef, NamedDecl *D) {
|
|||
if (LookupModules.empty())
|
||||
return false;
|
||||
|
||||
if (!DeclModule) {
|
||||
DeclModule = SemaRef.getOwningModule(D);
|
||||
assert(DeclModule && "hidden decl not from a module");
|
||||
}
|
||||
|
||||
// If our lookup set contains the decl's module, it's visible.
|
||||
if (LookupModules.count(DeclModule))
|
||||
return true;
|
||||
|
|
Loading…
Reference in New Issue