diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2020-11-16 21:10:12 +0100 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2020-11-16 21:10:12 +0100 |
commit | 2a8909ce44ee765b527ab05d9ef49d49abf51be2 (patch) | |
tree | d415933afe33a1e2f4fff6367d9e755fa91e6038 /gcc | |
parent | 21d37e5c24671e50ecc3801fd5da5b5b036c8957 (diff) | |
download | gcc-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.c | 13 |
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 |