! { dg-do compile } ! { dg-options "-fcoarray=single" } ! ! Valid code - but currently not implemented for -fcoarray=lib; single okay ! subroutine one implicit none type t integer, allocatable :: a integer :: b end type t type t2 type(t), allocatable :: caf2[:] end type t2 type(t), save :: caf[*],x type(t2) :: y x = caf[4] x%a = caf[4]%a x%b = caf[4]%a x = y%caf2[5] x%a = y%caf2[4]%a x%b = y%caf2[4]%b end subroutine one subroutine two implicit none type t integer, pointer :: a integer :: b end type t type t2 type(t), allocatable :: caf2[:] end type t2 type(t), save :: caf[*],x type(t2) :: y x = caf[4] x%a = caf[4]%a x%b = caf[4]%b x = y%caf2[5] x%a = y%caf2[4]%a x%b = y%caf2[4]%b end subroutine two subroutine three implicit none type t integer :: b end type t type t2 type(t), allocatable :: caf2(:)[:] end type t2 type(t), save :: caf(10)[*] integer :: x(10) type(t2) :: y x(1) = caf(2)[4]%b x(:) = caf(:)[4]%b x(1) = y%caf2(2)[4]%b x(:) = y%caf2(:)[4]%b end subroutine three subroutine four implicit none type t integer, allocatable :: a integer :: b end type t type t2 class(t), allocatable :: caf2[:] end type t2 class(t), allocatable :: caf[:] type(t) :: x type(t2) :: y x = caf[4] x%a = caf[4]%a x%b = caf[4]%b x = y%caf2[5] x%a = y%caf2[4]%a x%b = y%caf2[4]%b end subroutine four subroutine five implicit none type t integer, pointer :: a integer :: b end type t type t2 class(t), allocatable :: caf2[:] end type t2 class(t), save, allocatable :: caf[:] type(t) :: x type(t2) :: y x = caf[4] x%a = caf[4]%a x%b = caf[4]%b x = y%caf2[5] x%a = y%caf2[4]%a x%b = y%caf2[4]%b end subroutine five subroutine six implicit none type t integer :: b end type t type t2 class(t), allocatable :: caf2(:)[:] end type t2 class(t), save, allocatable :: caf(:)[:] integer :: x(10) type(t2) :: y x(1) = caf(2)[4]%b x(:) = caf(:)[4]%b x(1) = y%caf2(2)[4]%b x(:) = y%caf2(:)[4]%b end subroutine six