1! { dg-do run }
2!
3! PR fortran/18918
4!
5! this_image(coarray) run test,
6! expecially for num_images > 1
7!
8! Tested are values up to num_images == 8,
9! higher values are OK, but not tested for
10!
11implicit none
12integer :: a(1)[2:2, 3:4, 7:*]
13integer :: b(:)[:, :,:]
14allocatable :: b
15integer :: i
16
17if (this_image(A, dim=1) /= 2) STOP 1
18i = 1
19if (this_image(A, dim=i) /= 2) STOP 2
20
21select case (this_image())
22  case (1)
23    if (this_image(A, dim=2) /= 3) STOP 3
24    if (this_image(A, dim=3) /= 7) STOP 4
25    i = 2
26    if (this_image(A, dim=i) /= 3) STOP 5
27    i = 3
28    if (this_image(A, dim=i) /= 7) STOP 6
29    if (any (this_image(A) /= [2,3,7])) STOP 7
30
31  case (2)
32    if (this_image(A, dim=2) /= 4) STOP 8
33    if (this_image(A, dim=3) /= 7) STOP 9
34    i = 2
35    if (this_image(A, dim=i) /= 4) STOP 10
36    i = 3
37    if (this_image(A, dim=i) /= 7) STOP 11
38    if (any (this_image(A) /= [2,4,7])) STOP 12
39
40  case (3)
41    if (this_image(A, dim=2) /= 3) STOP 13
42    if (this_image(A, dim=3) /= 8) STOP 14
43    i = 2
44    if (this_image(A, dim=i) /= 3) STOP 15
45    i = 3
46    if (this_image(A, dim=i) /= 8) STOP 16
47    if (any (this_image(A) /= [2,3,8])) STOP 17
48
49  case (4)
50    if (this_image(A, dim=2) /= 4) STOP 18
51    if (this_image(A, dim=3) /= 8) STOP 19
52    i = 2
53    if (this_image(A, dim=i) /= 4) STOP 20
54    i = 3
55    if (this_image(A, dim=i) /= 8) STOP 21
56    if (any (this_image(A) /= [2,4,8])) STOP 22
57
58  case (5)
59    if (this_image(A, dim=2) /= 3) STOP 23
60    if (this_image(A, dim=3) /= 9) STOP 24
61    i = 2
62    if (this_image(A, dim=i) /= 3) STOP 25
63    i = 3
64    if (this_image(A, dim=i) /= 9) STOP 26
65    if (any (this_image(A) /= [2,3,9])) STOP 27
66
67  case (6)
68    if (this_image(A, dim=2) /= 4) STOP 28
69    if (this_image(A, dim=3) /= 9) STOP 29
70    i = 2
71    if (this_image(A, dim=i) /= 4) STOP 30
72    i = 3
73    if (this_image(A, dim=i) /= 9) STOP 31
74    if (any (this_image(A) /= [2,4,9])) STOP 32
75
76  case (7)
77    if (this_image(A, dim=2) /= 3) STOP 33
78    if (this_image(A, dim=3) /= 10) STOP 34
79    i = 2
80    if (this_image(A, dim=i) /= 3) STOP 35
81    i = 3
82    if (this_image(A, dim=i) /= 10) STOP 36
83    if (any (this_image(A) /= [2,3,10])) STOP 37
84
85  case (8)
86    if (this_image(A, dim=2) /= 4) STOP 38
87    if (this_image(A, dim=3) /= 10) STOP 39
88    i = 2
89    if (this_image(A, dim=i) /= 4) STOP 40
90    i = 3
91    if (this_image(A, dim=i) /= 10) STOP 41
92    if (any (this_image(A) /= [2,4,10])) STOP 42
93end select
94
95
96allocate (b(3)[-1:0,2:4,*])
97
98select case (this_image())
99  case (1)
100    if (this_image(B, dim=1) /= -1) STOP 43
101    if (this_image(B, dim=2) /= 2) STOP 44
102    if (this_image(B, dim=3) /= 1) STOP 45
103    i = 1
104    if (this_image(B, dim=i) /= -1) STOP 46
105    i = 2
106    if (this_image(B, dim=i) /= 2) STOP 47
107    i = 3
108    if (this_image(B, dim=i) /= 1) STOP 48
109    if (any (this_image(B) /= [-1,2,1])) STOP 49
110
111  case (2)
112    if (this_image(B, dim=1) /= 0) STOP 50
113    if (this_image(B, dim=2) /= 2) STOP 51
114    if (this_image(B, dim=3) /= 1) STOP 52
115    i = 1
116    if (this_image(B, dim=i) /= 0) STOP 53
117    i = 2
118    if (this_image(B, dim=i) /= 2) STOP 54
119    i = 3
120    if (this_image(B, dim=i) /= 1) STOP 55
121    if (any (this_image(B) /= [0,2,1])) STOP 56
122
123  case (3)
124    if (this_image(B, dim=1) /= -1) STOP 57
125    if (this_image(B, dim=2) /= 3) STOP 58
126    if (this_image(B, dim=3) /= 1) STOP 59
127    i = 1
128    if (this_image(B, dim=i) /= -1) STOP 60
129    i = 2
130    if (this_image(B, dim=i) /= 3) STOP 61
131    i = 3
132    if (this_image(B, dim=i) /= 1) STOP 62
133    if (any (this_image(B) /= [-1,3,1])) STOP 63
134
135  case (4)
136    if (this_image(B, dim=1) /= 0) STOP 64
137    if (this_image(B, dim=2) /= 3) STOP 65
138    if (this_image(B, dim=3) /= 1) STOP 66
139    i = 1
140    if (this_image(B, dim=i) /= 0) STOP 67
141    i = 2
142    if (this_image(B, dim=i) /= 3) STOP 68
143    i = 3
144    if (this_image(B, dim=i) /= 1) STOP 69
145    if (any (this_image(B) /= [0,3,1])) STOP 70
146
147  case (5)
148    if (this_image(B, dim=1) /= -1) STOP 71
149    if (this_image(B, dim=2) /= 4) STOP 72
150    if (this_image(B, dim=3) /= 1) STOP 73
151    i = 1
152    if (this_image(B, dim=i) /= -1) STOP 74
153    i = 2
154    if (this_image(B, dim=i) /= 4) STOP 75
155    i = 3
156    if (this_image(B, dim=i) /= 1) STOP 76
157    if (any (this_image(B) /= [-1,4,1])) STOP 77
158
159  case (6)
160    if (this_image(B, dim=1) /= 0) STOP 78
161    if (this_image(B, dim=2) /= 4) STOP 79
162    if (this_image(B, dim=3) /= 1) STOP 80
163    i = 1
164    if (this_image(B, dim=i) /= 0) STOP 81
165    i = 2
166    if (this_image(B, dim=i) /= 4) STOP 82
167    i = 3
168    if (this_image(B, dim=i) /= 1) STOP 83
169    if (any (this_image(B) /= [0,4,1])) STOP 84
170
171  case (7)
172    if (this_image(B, dim=1) /= -1) STOP 85
173    if (this_image(B, dim=2) /= 2) STOP 86
174    if (this_image(B, dim=3) /= 2) STOP 87
175    i = 1
176    if (this_image(B, dim=i) /= -1) STOP 88
177    i = 2
178    if (this_image(B, dim=i) /= 2) STOP 89
179    i = 3
180    if (this_image(B, dim=i) /= 2) STOP 90
181    if (any (this_image(B) /= [-1,2,2])) STOP 91
182
183  case (8)
184    if (this_image(B, dim=1) /= 0) STOP 92
185    if (this_image(B, dim=2) /= 2) STOP 93
186    if (this_image(B, dim=3) /= 2) STOP 94
187    i = 1
188    if (this_image(B, dim=i) /= 0) STOP 95
189    i = 2
190    if (this_image(B, dim=i) /= 2) STOP 96
191    i = 3
192    if (this_image(B, dim=i) /= 2) STOP 97
193    if (any (this_image(B) /= [0,2,2])) STOP 98
194end select
195
196end
197