[flang-commits] [flang] 948d0b3 - [flang] Correct actual/dummy procedure compatibility for ALLOCATABLE/POINTER functions

Peter Klausler via flang-commits flang-commits at lists.llvm.org
Mon May 9 17:09:41 PDT 2022


Author: Peter Klausler
Date: 2022-05-09T16:40:21-07:00
New Revision: 948d0b340b86b9f0ba79195bdd67451832727fbf

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

LOG: [flang] Correct actual/dummy procedure compatibility for ALLOCATABLE/POINTER functions

Functions returning ALLOCATABLE or POINTER arrays have descriptor inquiries in
their results' shape expressions that won't compare equal.  These functions
need only be checked for compatible ranks (& of course other characteristics).

Differential Revision: https://reviews.llvm.org/D125123

Added: 
    

Modified: 
    flang/lib/Evaluate/characteristics.cpp

Removed: 
    


################################################################################
diff  --git a/flang/lib/Evaluate/characteristics.cpp b/flang/lib/Evaluate/characteristics.cpp
index cac34df644b4..95bc5f132703 100644
--- a/flang/lib/Evaluate/characteristics.cpp
+++ b/flang/lib/Evaluate/characteristics.cpp
@@ -788,7 +788,10 @@ bool FunctionResult::IsCompatibleWith(const FunctionResult &actual) const {
     return false;
   } else if (const auto *ifaceTypeShape{std::get_if<TypeAndShape>(&u)}) {
     if (const auto *actualTypeShape{std::get_if<TypeAndShape>(&actual.u)}) {
-      if (ifaceTypeShape->shape() != actualTypeShape->shape()) {
+      if (ifaceTypeShape->Rank() != actualTypeShape->Rank()) {
+        return false;
+      } else if (!attrs.test(Attr::Allocatable) && !attrs.test(Attr::Pointer) &&
+          ifaceTypeShape->shape() != actualTypeShape->shape()) {
         return false;
       } else {
         return ifaceTypeShape->type().IsTkCompatibleWith(


        


More information about the flang-commits mailing list