From d80d812df0c829b6dbbcb968e7c3cf3c6be6ff41 Mon Sep 17 00:00:00 2001 From: Peter Klausler Date: Mon, 9 May 2022 09:37:35 -0700 Subject: [PATCH] [flang] Fix check for assumed-size arguments to SHAPE() & al. The predicate that is used to detect an invalid assumed-size argument to the intrinsic functions SHAPE, SIZE, & LBOUND gives false results for arguments whose shapes are not calculatable at compilation time. Replace with an explicit test for an assumed-size array dummy argument symbol. Differential Revision: https://reviews.llvm.org/D125342 --- flang/lib/Evaluate/intrinsics.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flang/lib/Evaluate/intrinsics.cpp b/flang/lib/Evaluate/intrinsics.cpp index c65825abb1aa..64aafe5e5083 100644 --- a/flang/lib/Evaluate/intrinsics.cpp +++ b/flang/lib/Evaluate/intrinsics.cpp @@ -1563,8 +1563,8 @@ std::optional IntrinsicInterface::Match( // (A previous error message for UBOUND will take precedence // over this one, as this error is caught by the second entry // for UBOUND.) - if (std::optional shape{GetShape(context, *arg)}) { - if (!shape->empty() && !shape->back().has_value()) { + if (const Symbol * argSym{GetLastSymbol(*arg)}) { + if (semantics::IsAssumedSizeArray(*argSym)) { if (strcmp(name, "shape") == 0) { messages.Say(arg->sourceLocation(), "The '%s=' argument to the intrinsic function '%s' may not be assumed-size"_err_en_US,