(j3.2006) assumed-size poly actual -> non-poly dummy

Robert Corbett robert.corbett
Fri Jan 28 18:29:38 EST 2011


Aleksandar Donev wrote:
> On 01/28/11 15:17, Robert Corbett wrote:
> 
>> An implicit selection is done.  The implicit selection is not prohibited
>> by the language of the standard.  An explicit selection is prohibited by
>> the standard as written.
> 
> I believe you but I do not understand you. What is the rule that 
> prohibits an explicit selection, i.e., kills the example below. The rule 
> you cited (clause 6.5.2 paragraph 2) does not mention anything about 
> components and so I do not understand where this distinction between 
> explicit and implicit comes from.
> 
>    subroutine sub1(x)
>       type(t) :: x(*)
>       call sub2(x%i)
>    end subroutine

It is my fault.  I stated the exclusion as a positive exclusion,
while the standard expresses it as an omitted inclusion.  I shall
explain it again using the same sense as the standard.

Clause 6.5.2 of 10=007r1 states

      A whole array is a named array or a structure component whose
      final /part-ref/ is an array component; no subscript list is
      appended.

and

      An assumed-size array (5.3.8.5) is permitted to appear as a
      whole array in an executable construct or specification
      expression only as an actual argument in a procedure
      reference that does not require the shape.

The statement

        call sub2(x%i)

is an action statement, which is in turn an executable construct.
The expression x%i is the actual argument of the call statement.
The subexpression x is not an actual argument of the call statement.
It is, instead, the left-most part-ref of a data ref.  A whole
array that is an assumed-size array is permitted to appear only as
an actual argument.  The array x does not appear as an actual
argument.  Therefore, the code fragment you show is not standard
conforming.

Robert Corbett





More information about the J3 mailing list