aboutsummaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2021-09-26 19:26:01 +0200
committerTobias Burnus <tobias@codesourcery.com>2021-09-26 19:26:01 +0200
commitfe2771b291c2c7c0ac37b75ec5b160937524b60c (patch)
tree7e067547374db3f7fc794ba76902bd17d056b930 /libgfortran
parente98e12c40bf3b2d37c3d9acb914fef495c704da5 (diff)
downloadgcc-fe2771b291c2c7c0ac37b75ec5b160937524b60c.zip
gcc-fe2771b291c2c7c0ac37b75ec5b160937524b60c.tar.gz
gcc-fe2771b291c2c7c0ac37b75ec5b160937524b60c.tar.bz2
Fortran: Fix associated intrinsic with assumed rank [PR101334]
ASSOCIATE (ptr, tgt) takes as first argument also an assumed-rank array; however, using it together with a tgt (required to be non assumed rank) had issues for both scalar and nonscalar tgt. PR fortran/101334 gcc/fortran/ChangeLog: * trans-intrinsic.c (gfc_conv_associated): Support assumed-rank 'pointer' with scalar/array 'target' argument. libgfortran/ChangeLog: * intrinsics/associated.c (associated): Also check for same rank. gcc/testsuite/ChangeLog: * gfortran.dg/associated_assumed_rank.f90: New test.
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/intrinsics/associated.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/libgfortran/intrinsics/associated.c b/libgfortran/intrinsics/associated.c
index 943fc69..60c88ff 100644
--- a/libgfortran/intrinsics/associated.c
+++ b/libgfortran/intrinsics/associated.c
@@ -41,8 +41,9 @@ associated (const gfc_array_void *pointer, const gfc_array_void *target)
return 0;
if (GFC_DESCRIPTOR_DTYPE (pointer).type != GFC_DESCRIPTOR_DTYPE (target).type)
return 0;
-
rank = GFC_DESCRIPTOR_RANK (pointer);
+ if (rank != GFC_DESCRIPTOR_RANK (target))
+ return 0;
for (n = 0; n < rank; n++)
{
long extent;