summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/coarray/lock_2.f90
blob: 8e96154996d44fe0bbd30dedb6ac605e09b6b110 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
! { 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