[flang-commits] [flang] [flang] Check coranks on MOVE_ALLOC (PR #129944)
Peter Klausler via flang-commits
flang-commits at lists.llvm.org
Wed Mar 5 14:02:36 PST 2025
https://github.com/klausler created https://github.com/llvm/llvm-project/pull/129944
The FROM= and TO= arguments in a reference to the MOVE_ALLOC intrinsic subroutine must have the same corank.
>From 9d90af8f666403caa56eb0caf45eeca7870bed6d Mon Sep 17 00:00:00 2001
From: Peter Klausler <pklausler at nvidia.com>
Date: Wed, 5 Mar 2025 14:00:37 -0800
Subject: [PATCH] [flang] Check coranks on MOVE_ALLOC
The FROM= and TO= arguments in a reference to the MOVE_ALLOC intrinsic
subroutine must have the same corank.
---
flang/lib/Semantics/check-call.cpp | 7 +++++++
flang/test/Semantics/move_alloc.f90 | 5 ++++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/flang/lib/Semantics/check-call.cpp b/flang/lib/Semantics/check-call.cpp
index ecc1e3d27e3bf..e3c716fce4ebb 100644
--- a/flang/lib/Semantics/check-call.cpp
+++ b/flang/lib/Semantics/check-call.cpp
@@ -1840,6 +1840,13 @@ static void CheckMove_Alloc(evaluate::ActualArguments &arguments,
if (arguments.size() >= 2) {
evaluate::CheckForCoindexedObject(
messages, arguments[1], "move_alloc", "to");
+ int fromCR{GetCorank(arguments[0])};
+ int toCR{GetCorank(arguments[1])};
+ if (fromCR != toCR) {
+ messages.Say(*arguments[0]->sourceLocation(),
+ "FROM= argument to MOVE_ALLOC has corank %d, but TO= argument has corank %d"_err_en_US,
+ fromCR, toCR);
+ }
}
if (arguments.size() >= 3) {
evaluate::CheckForCoindexedObject(
diff --git a/flang/test/Semantics/move_alloc.f90 b/flang/test/Semantics/move_alloc.f90
index 3303a002039bb..73db594129eab 100644
--- a/flang/test/Semantics/move_alloc.f90
+++ b/flang/test/Semantics/move_alloc.f90
@@ -1,7 +1,7 @@
! RUN: %python %S/test_errors.py %s %flang_fc1
! Check for semantic errors in move_alloc() subroutine calls
program main
- integer, allocatable :: a(:)[:], b(:)[:], f(:), g(:)
+ integer, allocatable :: a(:)[:], b(:)[:], f(:), g(:), h(:)[:,:]
type alloc_component
integer, allocatable :: a(:)
end type
@@ -73,4 +73,7 @@ program main
!ERROR: Argument #2 to MOVE_ALLOC must be allocatable
call move_alloc(f, g(::2))
+ !ERROR: FROM= argument to MOVE_ALLOC has corank 1, but TO= argument has corank 2
+ call move_alloc(a, h)
+
end program main
More information about the flang-commits
mailing list