When a function or a subroutine is invoked, parameters are associated, from left to right, with the passed arguments.
In general:
Arguments that require aggregate temporaries derived from structures are not allowed, unless the structure argument is declared with constant extents.
Expressions in the argument list are evaluated in the invoking block before the subroutine or function is invoked. A parameter has no storage associated with it. It is merely a means of allowing the invoked procedure to access storage allocated in the invoking procedure.