[flang-commits] [flang] d80d812 - [flang] Fix check for assumed-size arguments to SHAPE() & al.

Peter Klausler via flang-commits flang-commits at lists.llvm.org
Wed May 11 10:33:23 PDT 2022


Author: Peter Klausler
Date: 2022-05-11T10:33:17-07:00
New Revision: d80d812df0c829b6dbbcb968e7c3cf3c6be6ff41

URL: https://github.com/llvm/llvm-project/commit/d80d812df0c829b6dbbcb968e7c3cf3c6be6ff41
DIFF: https://github.com/llvm/llvm-project/commit/d80d812df0c829b6dbbcb968e7c3cf3c6be6ff41.diff

LOG: [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

Added: 
    

Modified: 
    flang/lib/Evaluate/intrinsics.cpp

Removed: 
    


################################################################################
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<SpecificCall> 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> 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,


        


More information about the flang-commits mailing list