blob: 8e96154996d44fe0bbd30dedb6ac605e09b6b110 [file] [log] [blame]
! { dg-do run }
!
! LOCK/UNLOCK check
!
! PR fortran/18918
!
use iso_fortran_env
implicit none
type(lock_type), allocatable :: lock1[:]
type(lock_type), allocatable :: lock2(:,:)[:]
type(lock_type) :: lock3(4)[*]
integer :: stat
logical :: acquired
allocate(lock1[*])
allocate(lock2(2,2)[*])
LOCK(lock1)
UNLOCK(lock1)
LOCK(lock2(1,1))
LOCK(lock2(2,2))
UNLOCK(lock2(1,1))
UNLOCK(lock2(2,2))
LOCK(lock3(3))
LOCK(lock3(4))
UNLOCK(lock3(3))
UNLOCK(lock3(4))
stat = 99
LOCK(lock1, stat=stat)
if (stat /= 0) STOP 1
LOCK(lock2(1,1), stat=stat)
if (stat /= 0) STOP 2
LOCK(lock2(2,2), stat=stat)
if (stat /= 0) STOP 3
LOCK(lock3(3), stat=stat)
if (stat /= 0) STOP 4
LOCK(lock3(4), stat=stat)
if (stat /= 0) STOP 5
stat = 99
UNLOCK(lock1, stat=stat)
if (stat /= 0) STOP 6
UNLOCK(lock2(1,1), stat=stat)
if (stat /= 0) STOP 7
UNLOCK(lock2(2,2), stat=stat)
if (stat /= 0) STOP 8
UNLOCK(lock3(3), stat=stat)
if (stat /= 0) STOP 9
UNLOCK(lock3(4), stat=stat)
if (stat /= 0) STOP 10
if (this_image() == 1) then
acquired = .false.
LOCK (lock1[this_image()], acquired_lock=acquired)
if (.not. acquired) STOP 11
acquired = .false.
LOCK (lock2(1,1)[this_image()], acquired_lock=acquired)
if (.not. acquired) STOP 12
acquired = .false.
LOCK (lock2(2,2)[this_image()], acquired_lock=acquired)
if (.not. acquired) STOP 13
acquired = .false.
LOCK (lock3(3)[this_image()], acquired_lock=acquired)
if (.not. acquired) STOP 14
acquired = .false.
LOCK (lock3(4)[this_image()], acquired_lock=acquired)
if (.not. acquired) STOP 15
UNLOCK (lock1[1])
UNLOCK (lock2(1,1)[1])
UNLOCK (lock2(2,2)[1])
UNLOCK (lock3(3)[1])
UNLOCK (lock3(4)[1])
end if
end