A syntactic consequence of the semantic rule that no two execution instances of the body may assign to the same atomic data object is that each of the index-name variables must appear on the left-hand side of a forall-assignment. The converse is not true (i.e., using all index-name variables on the left-hand side does not guarantee there will be no interference). Because the condition is not sufficient, it does not appear a syntax constraint. This also allows for easier future extensions for private variables or other syntactic sugar.
Right-hand sides and expressions on the left hand side of a forall-assignment are defined as evaluated only for combinations of index-names for which the scalar-mask-expr evaluates to .TRUE. This has implications when the masked computation might create an error condition. For example, FORALL (i=1:n, y(i).NE.0.0) x(i) = 1.0 / y(i) does not cause a division by zero. (End of rationale.)