[J3] Coarrays + CO_REDUCE and (polymorphic) allocatable components

Tobias Burnus burnus at net-b.de
Thu Mar 18 11:36:10 UTC 2021


Hi all,

I was wondering whether the following is valid:

type t
   integer, allocatable :: A(:)
   type(t), allocatable :: B
   class(*), allocatable :: C
end type t

type(t) :: var[*]

...
call co_reduce(var, my_red_fn)

At a glance, I could not find anything which states that
this is invalid, but I note that for a distributed-memory
implementation, the CO_REDUCE has to remotely access
   var[i]%A and var[i]%B
before calling 'my_red_fn' locally – and especially
resolving the dynamic type of 'B' might be difficult.

And worse is the part about distributing the data back to
the result_image or all images, in particular if the
shape/dynamic type does not match.

For data-ref, there is:

C917   (R911) Except as an actual argument to an
intrinsic inquiry function or as the designator in a
type parameter inquiry, a data-ref shall not be a
coindexed object that has a polymorphic allocatable
potential subobject component

C918   Except as an actual argument to an intrinsic
inquiry function or as the designator in a type parameter
inquiry, if the rightmost part-ref is polymorphic,
no other part-ref shall be coindexed.

And for CO_REDUCE, there is: "'A' shall not be polymorphic."


Is this intended to be valid? Did I miss some constraint?
Or was this an oversight?


Tobias



More information about the J3 mailing list