Next: Pure Procedures Up: The FORALL Construct Previous: Scalarization of the
One may think of a block FORALL as synchronizing twice per contained assignment statement: once after handling the right-hand side and other expressions but before performing assignments, and once after all assignments have been performed but before commencing the next statement. In practice, appropriate analysis will often permit the compiler to eliminate unnecessary synchronizations.
In general, any expression in a FORALL is evaluated only for valid combinations of all surrounding index-names for which all the scalar mask expressions are .TRUE.
Nested FORALL bounds and strides can depend on outer FORALL index-names. They cannot redefine those names, even temporarily (if they did, there would be no way to avoid multiple assignments to the same array element).
Statements can use the results of computations in lexically earlier statements, including computations done for other -name values. However, an assignment never uses a value assigned in the same statement by another index-name value combination.
(End of rationale.)