aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2020-11-16 21:10:12 +0100
committerThomas Koenig <tkoenig@gcc.gnu.org>2020-11-16 21:10:12 +0100
commit2a8909ce44ee765b527ab05d9ef49d49abf51be2 (patch)
treed415933afe33a1e2f4fff6367d9e755fa91e6038 /gcc
parent21d37e5c24671e50ecc3801fd5da5b5b036c8957 (diff)
downloadgcc-2a8909ce44ee765b527ab05d9ef49d49abf51be2.zip
gcc-2a8909ce44ee765b527ab05d9ef49d49abf51be2.tar.gz
gcc-2a8909ce44ee765b527ab05d9ef49d49abf51be2.tar.bz2
Follow reference for determining offset.
gcc/fortran/ChangeLog: * trans-array.c (gfc_conv_ss_descriptor): Follow reference for determining offset.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/trans-array.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index fd66f0b..883876b 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -3083,11 +3083,14 @@ gfc_conv_ss_descriptor (stmtblock_t * block, gfc_ss * ss, int base)
offset for the codimensions. */
// TODO: check whether the recipient is a coarray, if it is, disable
// all of this
- if (flag_coarray == GFC_FCOARRAY_SHARED && ref && ref->type == REF_ARRAY
- && ref->u.ar.dimen_type[ref->u.ar.dimen + ref->u.ar.codimen - 1]
- == DIMEN_THIS_IMAGE)
- tmp = gfc_add_strides (tmp, se.expr, ref->u.ar.as->rank,
- ref->u.ar.as->rank + ref->u.ar.as->corank);
+ if (flag_coarray == GFC_FCOARRAY_SHARED)
+ {
+ gfc_ref *co_ref = cas_array_ref (ref);
+ if (co_ref)
+ tmp = gfc_add_strides (tmp, se.expr, co_ref->u.ar.as->rank,
+ co_ref->u.ar.as->rank
+ + co_ref->u.ar.as->corank);
+ }
info->offset = gfc_evaluate_now (tmp, block);
/* Make absolutely sure that the saved_offset is indeed saved