[Bug fortran/31732] [4.3 regression] Assignment to array slice affects whole array
pault at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Apr 30 11:06:00 GMT 2007
------- 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
More information about the Gcc-bugs
mailing list