From: Jean Perier Date: Wed, 23 Sep 2020 11:38:10 +0000 (+0200) Subject: [flang] CHARACTER(*) return does not require explicit interface X-Git-Tag: llvmorg-13-init~11195 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bd72ed93d22a1579362859e64a0c7f9c68460cf8;p=platform%2Fupstream%2Fllvm.git [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 --- 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;