[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