In gfc_check_element_vs_element we could return GFC_DEP_EQUAL for
two unordered scalar subscripts (elements). Originally, when
examining subscripts if we discovered that X and Y were unordered
in a(X,...) vs. a(Y,...) we'd return GFC_DEP_NODEP (a bug) which was
treated by the caller like X<Y or X>Y, and incorrectly returned
"no dependency" without examining the "...". This was fixed
yesterday by taking the pessimistic assumption that unordered X
and Y, should return GFC_DEP_OVERLAP. This causes the caller to
inspect the remaining dimensions such that if it finds a later
NODEP, there's no dependency as in a(X,0,:) = a(Y,1,:) where
the 0 != 1 guarantees independence. The tweak below is to
optimistically/safely return GFC_DEP_EQUAL, which again forces
the examination of "...", but allows us to notice independence
at the end. i.e. elements that return GFC_DEP_EQUAL are effectively
ignored in the dependency analysis.
Fortunately, there's a whole paper on this, if the above explanation
wasn't too confusing. dependency.c actually does slightly better
(or will shortly be slightly better) than the analysis described in
that paper, which was used in SUN's and Cray's F90 compilers.