aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/intrinsics
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2008-03-28 14:47:06 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2008-03-28 14:47:06 +0100
commit3e08bbcfe8cf565f51869ed0e1f36a56e742d954 (patch)
treebc7075222c4580d1b29a61956a7d5b16553ba268 /libgfortran/intrinsics
parent626f4dd8f52c0e85892dc4bd9f7bb2a1c87e2f3c (diff)
downloadgcc-3e08bbcfe8cf565f51869ed0e1f36a56e742d954.zip
gcc-3e08bbcfe8cf565f51869ed0e1f36a56e742d954.tar.gz
gcc-3e08bbcfe8cf565f51869ed0e1f36a56e742d954.tar.bz2
re PR fortran/35721 (ASSOCIATED returns false when strides confusing)
2008-03-28 Tobias Burnus <burnus@net-b.de> PR fortran/35721 * intrinsics/associated.c (associated): Ignore different stride of pointer vs. target if only one element is referred. 2008-03-28 Tobias Burnus <burnus@net-b.de> PR fortran/35721 * gfortran.dg/associated_target_2.f90: New. From-SVN: r133684
Diffstat (limited to 'libgfortran/intrinsics')
-rw-r--r--libgfortran/intrinsics/associated.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/libgfortran/intrinsics/associated.c b/libgfortran/intrinsics/associated.c
index 0d32fd7..dc1da1d 100644
--- a/libgfortran/intrinsics/associated.c
+++ b/libgfortran/intrinsics/associated.c
@@ -48,10 +48,12 @@ associated (const gfc_array_void *pointer, const gfc_array_void *target)
rank = GFC_DESCRIPTOR_RANK (pointer);
for (n = 0; n < rank; n++)
{
- if (pointer->dim[n].stride != target->dim[n].stride)
+ long diff;
+ diff = pointer->dim[n].ubound - pointer->dim[n].lbound;
+
+ if (diff != (target->dim[n].ubound - target->dim[n].lbound))
return 0;
- if ((pointer->dim[n].ubound - pointer->dim[n].lbound)
- != (target->dim[n].ubound - target->dim[n].lbound))
+ if (pointer->dim[n].stride != target->dim[n].stride && diff != 0)
return 0;
if (pointer->dim[n].ubound < pointer->dim[n].lbound)
return 0;