From bd72ed93d22a1579362859e64a0c7f9c68460cf8 Mon Sep 17 00:00:00 2001 From: Jean Perier Date: Wed, 23 Sep 2020 13:38:10 +0200 Subject: [PATCH] [flang] CHARACTER(*) return does not require explicit interface Fortran 2018 15.4.2.2(4)(c) says nonassumed or explicit non-constant length parameter require explicit interface. The "nonassumed" part was missing in f18 characteristic analysis causing CanBeCalledViaImplicitInterface to return false for `CHARACTER(*) function foo()` like interfaces. Reviewed By: klausler Differential Revision: https://reviews.llvm.org/D88075 --- flang/lib/Evaluate/characteristics.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/flang/lib/Evaluate/characteristics.cpp b/flang/lib/Evaluate/characteristics.cpp index 9d301b6..de01336 100644 --- a/flang/lib/Evaluate/characteristics.cpp +++ b/flang/lib/Evaluate/characteristics.cpp @@ -485,6 +485,8 @@ bool FunctionResult::CanBeReturnedViaImplicitInterface() const { if (const auto *param{type.charLength()}) { if (const auto &expr{param->GetExplicit()}) { return IsConstantExpr(*expr); // 15.4.2.2(4)(c) + } else if (param->isAssumed()) { + return true; } } return false; -- 2.7.4