diff --git a/flang/lib/Semantics/check-declarations.cpp b/flang/lib/Semantics/check-declarations.cpp --- a/flang/lib/Semantics/check-declarations.cpp +++ b/flang/lib/Semantics/check-declarations.cpp @@ -291,7 +291,11 @@ canHaveAssumedParameter |= symbol.has(); } } - Check(*type, canHaveAssumedParameter); + if (IsProcedurePointer(symbol) && symbol.HasExplicitInterface()) { + // Don't check function result types here + } else { + Check(*type, canHaveAssumedParameter); + } if (InPure() && InFunction() && IsFunctionResult(symbol)) { if (derived && HasImpureFinal(*derived)) { // C1584 messages_.Say(