[flang-commits] [flang] a519d76 - [flang] Fix calls to interfaces with logical literal arguments

David Truby via flang-commits flang-commits at lists.llvm.org
Wed Aug 16 02:28:19 PDT 2023


Author: David Truby
Date: 2023-08-16T10:13:46+01:00
New Revision: a519d76a039157adca827cde427cdf47a8dcd709

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

LOG: [flang] Fix calls to interfaces with logical literal arguments

Fixes: 64698

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

Added: 
    

Modified: 
    flang/lib/Semantics/check-call.cpp
    flang/test/Evaluate/logical-args.f90

Removed: 
    


################################################################################
diff  --git a/flang/lib/Semantics/check-call.cpp b/flang/lib/Semantics/check-call.cpp
index a2ce064dbadad7..0469a72bcc7316 100644
--- a/flang/lib/Semantics/check-call.cpp
+++ b/flang/lib/Semantics/check-call.cpp
@@ -313,8 +313,8 @@ static void CheckExplicitDataArg(const characteristics::DummyDataObject &dummy,
   allowActualArgumentConversions &= !typesCompatibleWithIgnoreTKR;
   if (allowActualArgumentConversions) {
     ConvertIntegerActual(actual, dummy.type, actualType, messages);
+    ConvertLogicalActual(actual, dummy.type, actualType);
   }
-  ConvertLogicalActual(actual, dummy.type, actualType);
   bool typesCompatible{typesCompatibleWithIgnoreTKR ||
       dummy.type.type().IsTkCompatibleWith(actualType.type())};
   int dummyRank{dummy.type.Rank()};

diff  --git a/flang/test/Evaluate/logical-args.f90 b/flang/test/Evaluate/logical-args.f90
index 93531b04dfdf0b..68ab705550ae3b 100644
--- a/flang/test/Evaluate/logical-args.f90
+++ b/flang/test/Evaluate/logical-args.f90
@@ -2,7 +2,20 @@
 ! RUN: %flang_fc1 -fdebug-unparse %s 2>&1 | FileCheck %s
 ! RUN: %flang_fc1 -fdebug-unparse -fdefault-integer-8 %s 2>&1 | FileCheck %s --check-prefixes CHECK-8
 
+module m
+  interface foog
+     subroutine foo4(l)
+       logical(kind=4), intent(in) :: l
+     end subroutine foo4
+
+     subroutine foo8(l)
+       logical(kind=8), intent(in) :: l
+     end subroutine foo8
+  end interface foog
+end module m
+
 program main
+  use m
   integer :: x(10), y
   ! CHECK: CALL foo(.true._4)
   ! CHECK-8: CALL foo(logical(.true._4,kind=8))
@@ -11,6 +24,11 @@ program main
   ! CHECK-8: CALL fooa(logical(x>y,kind=8))
   call fooa(x > y)
 
+  ! Ensure that calls to interfaces call the correct subroutine
+  ! CHECK: CALL foo4(.true._4)
+  ! CHECK-8: CALL foo8(.true._8)
+  call foog(.true.)
+
   contains
     subroutine foo(l)
       logical :: l
@@ -19,4 +37,5 @@ end subroutine foo
     subroutine fooa(l)
       logical :: l(10)
     end subroutine fooa
+
 end program main


        


More information about the flang-commits mailing list