If the actual argument contains expressions then these are
evaluated before the procedure starts to execute; even if the
procedure later modifies operands of the expression this has no
effect on the value passed to the dummy argument. The same rule
applies to array subscript and character substring expressions. For
example, if the procedure call consists of:
CALL SUB( ARRAY(N), N, SIN(4.0*N), TEXT(1:N) )
and the procedure assigns a new value to the second argument, N,
during its execution, it has no effect on the other arguments which
all use the original value of N. The updated value of N will, of
course, be passed back to the calling unit.