------- Comment #7 from pault at gcc dot gnu dot org 2007-04-30 12:06 ------- Thomas,
I believe this one is OK - it needs cleaning up with gfc_dep_compare_expr's, as appropriate. It regtests OK. Index: gcc/fortran/dependency.c =================================================================== *** gcc/fortran/dependency.c (revision 124192) --- gcc/fortran/dependency.c (working copy) *************** gfc_full_array_ref_p (gfc_ref *ref) *** 1117,1128 **** if (ref->type != REF_ARRAY) return false; if (ref->u.ar.type == AR_FULL) return true; if (ref->u.ar.type != AR_SECTION) return false; - if (ref->next) - return false; for (i = 0; i < ref->u.ar.dimen; i++) { --- 1117,1128 ---- if (ref->type != REF_ARRAY) return false; + if (ref->next) + return false; if (ref->u.ar.type == AR_FULL) return true; if (ref->u.ar.type != AR_SECTION) return false; for (i = 0; i < ref->u.ar.dimen; i++) { *************** gfc_full_array_ref_p (gfc_ref *ref) *** 1143,1148 **** --- 1143,1161 ---- /* Check the stride. */ if (ref->u.ar.stride[i] && !gfc_expr_is_one (ref->u.ar.stride[i], 0)) return false; + + /* Check that this is not an array element of an array with range + greater than one. */ + if (ref->u.ar.dimen_type[i] == DIMEN_ELEMENT + && ref->u.ar.as->lower[i] + && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT + && ((ref->u.ar.as->upper[i] + && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT + && mpz_cmp (ref->u.ar.as->lower[i]->value.integer, + ref->u.ar.as->upper[i]->value.integer)) + || + mpz_cmp_si (ref->u.ar.as->lower[i]->value.integer, 1))) + return false; } return true; } Paul -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31732