| ! { 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 |
| |