diff options
Diffstat (limited to 'flang/lib/Semantics/tools.cpp')
-rw-r--r-- | flang/lib/Semantics/tools.cpp | 10 |
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; + } + } } } } |