! { dg-do compile } ! { dg-options "-fcoarray=single" } ! ! ! LOCK/LOCK_TYPE checks ! subroutine valid() use iso_fortran_env implicit none type t type(lock_type) :: lock end type t type t2 type(lock_type), allocatable :: lock(:)[:] end type t2 type(t), save :: a[*] type(t2), save :: b ! OK allocate(b%lock(1)[*]) LOCK(a%lock) ! OK LOCK(a[1]%lock) ! OK LOCK(b%lock(1)) ! OK LOCK(b%lock(1)[1]) ! OK end subroutine valid subroutine invalid() use iso_fortran_env implicit none type t type(lock_type) :: lock end type t type(t), save :: a ! { dg-error "type LOCK_TYPE or with subcomponent of type LOCK_TYPE must be a coarray" } end subroutine invalid subroutine more_tests use iso_fortran_env implicit none type t type(lock_type) :: a ! OK end type t type t1 type(lock_type), allocatable :: c2(:)[:] ! OK end type t1 type(t1) :: x1 ! OK type t2 type(lock_type), allocatable :: c1(:) ! { dg-error "Allocatable component c1 at .1. of type LOCK_TYPE must have a codimension" } end type t2 type t3 type(t) :: b end type t3 type(t3) :: x3 ! { dg-error "of type LOCK_TYPE or with subcomponent of type LOCK_TYPE must be a coarray" } type t4 type(lock_type) :: c0(2) end type t4 type(t4) :: x4 ! { dg-error "of type LOCK_TYPE or with subcomponent of type LOCK_TYPE must be a coarray" } end subroutine more_tests