(j3.2006) Simple coarray declaration questions

Tobias Burnus burnus
Wed Jun 1 03:01:17 EDT 2011


The following is probably trivial, but I still cannot make up my mind. 
The code compiles with three compilers and is rejected with one. Is the 
following program valid or not? I think it is invalid:

   subroutine test2()
     type t
       integer, allocatable :: a(:)[:]
     end type t
     type(t) :: x
     allocate(x%a(1)[*])
   end subroutine test2

   C526 A coarray or an object with a coarray ultimate
        component shall be a dummy argument or have the
        ALLOCATABLE or SAVE attribute.

  * * *

And another example, rejected by two compilers, accepted by two:

subroutine sub(n)
   integer :: n
   integer, SAVE :: A(4)[n,*]
end subroutine sub

The rejecting compiler claim that the bounds need to be constant for 
automatic arrays. I think the example is valid. While there is

C513 An automatic object shall not have the SAVE attribute.

the following shouldn't apply: "An automatic data object is a nondummy 
data object with a type parameter or array bound that depends on the 
value of a specification-expr that is not a constant expression."
Note the "bound" and not "cobound" (Cf. "1.3.27 cobound: bound (limit) 
of a codimension" vs. "1.3.17 bound / array bound: limit of a dimension 
of an array".)

Is it indeed valid?

Tobias



More information about the J3 mailing list