1! { dg-do run }
2
3program test
4  implicit none
5  integer, allocatable :: a1(:)
6  integer, allocatable :: b1(:)
7  integer, allocatable :: c1(:)
8  integer, allocatable :: b2(:,:)
9  integer, allocatable :: c3(:,:,:)
10
11  allocate (a1(5))
12  if (.not.allocated (a1)) STOP 49
13
14  a1 = 10
15
16  !$acc parallel copy(a1(1:5))
17  a1(1) = 1
18  a1(2) = 2
19  a1(3) = 3
20  a1(4) = 4
21  a1(5) = 5
22  !$acc end parallel
23
24  if (a1(1) .ne. 1) STOP 1
25  if (a1(2) .ne. 2) STOP 2
26  if (a1(3) .ne. 3) STOP 3
27  if (a1(4) .ne. 4) STOP 4
28  if (a1(5) .ne. 5) STOP 5
29
30  deallocate(a1)
31
32  allocate (a1(0:4))
33  if (.not.allocated (a1)) STOP 50
34
35  a1 = 10
36
37  !$acc parallel copy(a1(0:4))
38  a1(0) = 1
39  a1(1) = 2
40  a1(2) = 3
41  a1(3) = 4
42  a1(4) = 5
43  !$acc end parallel
44
45  if (a1(0) .ne. 1) STOP 6
46  if (a1(1) .ne. 2) STOP 7
47  if (a1(2) .ne. 3) STOP 8
48  if (a1(3) .ne. 4) STOP 9
49  if (a1(4) .ne. 5) STOP 10
50
51  deallocate(a1)
52
53  allocate (b2(5,5))
54  if (.not.allocated (b2)) STOP 51
55
56  b2 = 11
57
58  !$acc parallel copy(b2(1:5,1:5))
59  b2(1,1) = 1
60  b2(2,2) = 2
61  b2(3,3) = 3
62  b2(4,4) = 4
63  b2(5,5) = 5
64  !$acc end parallel
65
66  if (b2(1,1) .ne. 1) STOP 11
67  if (b2(2,2) .ne. 2) STOP 12
68  if (b2(3,3) .ne. 3) STOP 13
69  if (b2(4,4) .ne. 4) STOP 14
70  if (b2(5,5) .ne. 5) STOP 15
71
72  deallocate(b2)
73
74  allocate (b2(0:4,0:4))
75  if (.not.allocated (b2)) STOP 52
76
77  b2 = 11
78
79  !$acc parallel copy(b2(0:4,0:4))
80  b2(0,0) = 1
81  b2(1,1) = 2
82  b2(2,2) = 3
83  b2(3,3) = 4
84  b2(4,4) = 5
85  !$acc end parallel
86
87  if (b2(0,0) .ne. 1) STOP 16
88  if (b2(1,1) .ne. 2) STOP 17
89  if (b2(2,2) .ne. 3) STOP 18
90  if (b2(3,3) .ne. 4) STOP 19
91  if (b2(4,4) .ne. 5) STOP 20
92
93  deallocate(b2)
94
95  allocate (c3(5,5,5))
96  if (.not.allocated (c3)) STOP 53
97
98  c3 = 12
99
100  !$acc parallel copy(c3(1:5,1:5,1:5))
101  c3(1,1,1) = 1
102  c3(2,2,2) = 2
103  c3(3,3,3) = 3
104  c3(4,4,4) = 4
105  c3(5,5,5) = 5
106  !$acc end parallel
107
108  if (c3(1,1,1) .ne. 1) STOP 21
109  if (c3(2,2,2) .ne. 2) STOP 22
110  if (c3(3,3,3) .ne. 3) STOP 23
111  if (c3(4,4,4) .ne. 4) STOP 24
112  if (c3(5,5,5) .ne. 5) STOP 25
113
114  deallocate(c3)
115
116  allocate (c3(0:4,0:4,0:4))
117  if (.not.allocated (c3)) STOP 54
118
119  c3 = 12
120
121  !$acc parallel copy(c3(0:4,0:4,0:4))
122  c3(0,0,0) = 1
123  c3(1,1,1) = 2
124  c3(2,2,2) = 3
125  c3(3,3,3) = 4
126  c3(4,4,4) = 5
127  !$acc end parallel
128
129  if (c3(0,0,0) .ne. 1) STOP 26
130  if (c3(1,1,1) .ne. 2) STOP 27
131  if (c3(2,2,2) .ne. 3) STOP 28
132  if (c3(3,3,3) .ne. 4) STOP 29
133  if (c3(4,4,4) .ne. 5) STOP 30
134
135  deallocate(c3)
136
137  allocate (a1(5))
138  if (.not.allocated (a1)) STOP 55
139
140  allocate (b1(5))
141  if (.not.allocated (b1)) STOP 56
142
143  allocate (c1(5))
144  if (.not.allocated (c1)) STOP 57
145
146  a1 = 10
147  b1 = 3
148  c1 = 7
149
150  !$acc parallel copyin(a1(1:5)) create(c1(1:5)) copyout(b1(1:5))
151  c1(1) = a1(1)
152  c1(2) = a1(2)
153  c1(3) = a1(3)
154  c1(4) = a1(4)
155  c1(5) = a1(5)
156
157  b1(1) = c1(1)
158  b1(2) = c1(2)
159  b1(3) = c1(3)
160  b1(4) = c1(4)
161  b1(5) = c1(5)
162  !$acc end parallel
163
164  if (b1(1) .ne. 10) STOP 31
165  if (b1(2) .ne. 10) STOP 32
166  if (b1(3) .ne. 10) STOP 33
167  if (b1(4) .ne. 10) STOP 34
168  if (b1(5) .ne. 10) STOP 35
169
170  deallocate(a1)
171  deallocate(b1)
172  deallocate(c1)
173
174  allocate (a1(0:4))
175  if (.not.allocated (a1)) STOP 58
176
177  allocate (b1(0:4))
178  if (.not.allocated (b1)) STOP 59
179
180  allocate (c1(0:4))
181  if (.not.allocated (c1)) STOP 60
182
183  a1 = 10
184  b1 = 3
185  c1 = 7
186
187  !$acc parallel copyin(a1(0:4)) create(c1(0:4)) copyout(b1(0:4))
188  c1(0) = a1(0)
189  c1(1) = a1(1)
190  c1(2) = a1(2)
191  c1(3) = a1(3)
192  c1(4) = a1(4)
193
194  b1(0) = c1(0)
195  b1(1) = c1(1)
196  b1(2) = c1(2)
197  b1(3) = c1(3)
198  b1(4) = c1(4)
199  !$acc end parallel
200
201  if (b1(0) .ne. 10) STOP 36
202  if (b1(1) .ne. 10) STOP 37
203  if (b1(2) .ne. 10) STOP 38
204  if (b1(3) .ne. 10) STOP 39
205  if (b1(4) .ne. 10) STOP 40
206
207  deallocate(a1)
208  deallocate(b1)
209  deallocate(c1)
210
211  allocate (a1(5))
212  if (.not.allocated (a1)) STOP 61
213
214  a1 = 10
215
216  !$acc parallel copy(a1(2:3))
217  a1(2) = 2
218  a1(3) = 3
219  !$acc end parallel
220
221  if (a1(1) .ne. 10) STOP 41
222  if (a1(2) .ne. 2) STOP 42
223  if (a1(3) .ne. 3) STOP 43
224  if (a1(4) .ne. 10) STOP 44
225  if (a1(5) .ne. 10) STOP 45
226
227  deallocate(a1)
228
229end program test
230