diff options
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index c101612..d7b95f5 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -6636,6 +6636,7 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code) { int i, pointer, allocatable, dimension, is_abstract; int codimension; + bool coindexed; symbol_attribute attr; gfc_ref *ref, *ref2; gfc_expr *e2; @@ -6693,18 +6694,32 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code) codimension = sym->attr.codimension; } + coindexed = false; + for (ref = e->ref; ref; ref2 = ref, ref = ref->next) { switch (ref->type) { case REF_ARRAY: + if (ref->u.ar.codimen > 0) + { + int n; + for (n = ref->u.ar.dimen; + n < ref->u.ar.dimen + ref->u.ar.codimen; n++) + if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE) + { + coindexed = true; + break; + } + } + if (ref->next != NULL) pointer = 0; break; case REF_COMPONENT: /* F2008, C644. */ - if (gfc_is_coindexed (e)) + if (coindexed) { gfc_error ("Coindexed allocatable object at %L", &e->where); |