Index: dependency.c =================================================================== --- dependency.c (Revision 200743) +++ dependency.c (Arbeitskopie) @@ -2095,12 +2095,22 @@ gfc_dep_resolver (gfc_ref *lref, gfc_ref *rref, gf for (n=0; n < lref->u.ar.dimen; n++) { - /* Assume dependency when either of array reference is vector - subscript. */ + /* Handle dependency when either of array reference is vector + subscript. Assume dependency unless they are identical. */ if (lref->u.ar.dimen_type[n] == DIMEN_VECTOR || rref->u.ar.dimen_type[n] == DIMEN_VECTOR) - return 1; + { + if (lref->u.ar.dimen_type[n] == DIMEN_VECTOR + && rref->u.ar.dimen_type[n] == DIMEN_VECTOR + && gfc_dep_compare_expr (lref->u.ar.start[n], + rref->u.ar.start[n]) == 0) + this_dep = GFC_DEP_EQUAL; + else + this_dep = GFC_DEP_OVERLAP; + goto update_fin_dep; + } + if (lref->u.ar.dimen_type[n] == DIMEN_RANGE && rref->u.ar.dimen_type[n] == DIMEN_RANGE) this_dep = check_section_vs_section (&lref->u.ar, &rref->u.ar, n); @@ -2164,6 +2174,8 @@ gfc_dep_resolver (gfc_ref *lref, gfc_ref *rref, gf /* Overlap codes are in order of priority. We only need to know the worst one.*/ + + update_fin_dep: if (this_dep > fin_dep) fin_dep = this_dep; }