! { dg-do compile } ! { dg-options "-fcoarray=single" } ! ! PR fortran/44646 ! ! DO CONCURRENT ! implicit none integer :: i, j outer: do, concurrent ( i = 1 : 4) do j = 1, 5 if (j == 1) cycle ! OK cycle outer ! OK: C821 FIXME exit outer ! { dg-error "EXIT statement at .1. leaves DO CONCURRENT construct" } end do end do outer do concurrent (j = 1:5) cycle ! OK end do outer2: do j = 1, 7 do concurrent (j=1:5:2) ! cycle outer2 - bad: C821 cycle outer2 ! { dg-error "leaves DO CONCURRENT construct" } end do end do outer2 do concurrent ( i = 1 : 4) exit ! { dg-error "EXIT statement at .1. leaves DO CONCURRENT construct" } end do end subroutine foo() do concurrent ( i = 1 : 4) return ! { dg-error "Image control statement RETURN" } sync all ! { dg-error "Image control statement SYNC" } call test () ! { dg-error "Subroutine call to .test. in DO CONCURRENT block at .1. is not PURE" } stop ! { dg-error "Image control statement STOP" } end do do concurrent ( i = 1 : 4) critical ! { dg-error "Image control statement CRITICAL at .1. in DO CONCURRENT block" } print *, i ! end critical end do critical do concurrent ( i = 1 : 4) ! OK end do end critical end subroutine caf() use iso_fortran_env implicit none type(lock_type), allocatable :: lock[:] integer :: i do, concurrent (i = 1:3) allocate (lock[*]) ! { dg-error "ALLOCATE of coarray at .1. in DO CONCURRENT block" } lock(lock) ! { dg-error "Image control statement LOCK" } unlock(lock) ! { dg-error "Image control statement UNLOCK" } deallocate (lock) ! { dg-error "DEALLOCATE of coarray at .1. in DO CONCURRENT block" } end do critical allocate (lock[*]) ! { dg-error "ALLOCATE of coarray at .1. in CRITICAL block" } lock(lock) ! { dg-error "Image control statement LOCK" } unlock(lock) ! { dg-error "Image control statement UNLOCK" } deallocate (lock) ! { dg-error "DEALLOCATE of coarray at .1. in CRITICAL block" } end critical end subroutine caf