diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp --- a/flang/lib/Semantics/expression.cpp +++ b/flang/lib/Semantics/expression.cpp @@ -4038,18 +4038,16 @@ auto restorer{context_.GetContextualMessages().DiscardMessages()}; if (const Symbol *symbol{scope.FindSymbol(oprName)}) { ExpressionAnalyzer::AdjustActuals noAdjustment; - auto pair{context_.ResolveGeneric(*symbol, actuals_, noAdjustment, true)}; - if (pair.first) { - proc = pair.first; - } else { - context_.EmitGenericResolutionError(*symbol, pair.second, true); - } + proc = + context_.ResolveGeneric(*symbol, actuals_, noAdjustment, true).first; } for (std::size_t i{0}; !proc && i < actuals_.size(); ++i) { const Symbol *generic{nullptr}; if (const Symbol *binding{FindBoundOp(oprName, i, generic, true)}) { - if (const Symbol *resolution{ - GetBindingResolution(GetType(i), *binding)}) { + if (CheckAccessibleSymbol(scope, DEREF(generic))) { + // ignore inaccessible type-bound ASSIGNMENT(=) generic + } else if (const Symbol * + resolution{GetBindingResolution(GetType(i), *binding)}) { proc = resolution; } else { proc = binding;