summaryrefslogtreecommitdiff
path: root/flang/lib/Semantics/tools.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'flang/lib/Semantics/tools.cpp')
-rw-r--r--flang/lib/Semantics/tools.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/flang/lib/Semantics/tools.cpp b/flang/lib/Semantics/tools.cpp
index 711537ec4947..d7ef29951e8c 100644
--- a/flang/lib/Semantics/tools.cpp
+++ b/flang/lib/Semantics/tools.cpp
@@ -515,7 +515,15 @@ const Symbol *FindOverriddenBinding(const Symbol &symbol) {
if (const DeclTypeSpec * parentType{FindParentTypeSpec(symbol.owner())}) {
if (const DerivedTypeSpec * parentDerived{parentType->AsDerived()}) {
if (const Scope * parentScope{parentDerived->typeSymbol().scope()}) {
- return parentScope->FindComponent(symbol.name());
+ if (const Symbol *
+ overridden{parentScope->FindComponent(symbol.name())}) {
+ // 7.5.7.3 p1: only accessible bindings are overridden
+ if (!overridden->attrs().test(Attr::PRIVATE) ||
+ (FindModuleContaining(overridden->owner()) ==
+ FindModuleContaining(symbol.owner()))) {
+ return overridden;
+ }
+ }
}
}
}