[Fortran] OpenACC – permit common blocks in some clauses
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-fortran / common-block-1.f90
blob000d811a05986e30ad41d60bdb7774cf104c7f78
1 ! { dg-do run }
3 ! Test data located inside common blocks. This test does not exercise
4 ! ACC DECLARE.
6 module const
7 integer, parameter :: n = 100
8 end module const
10 subroutine check
11 use const
13 implicit none
14 integer i, x(n), y
15 common /BLOCK/ x, y
17 do i = 1, n
18 if (x(i) .ne. y) call abort
19 end do
20 end subroutine check
22 module m
23 use const
24 integer a(n), b
25 common /BLOCK/ a, b
27 contains
28 subroutine mod_implicit_incr
29 implicit none
30 integer i
32 !$acc parallel loop
33 do i = 1, n
34 a(i) = b
35 end do
36 !$acc end parallel loop
38 call check
39 end subroutine mod_implicit_incr
41 subroutine mod_explicit_incr
42 implicit none
43 integer i
45 !$acc parallel loop copy(a(1:n)) copyin(b)
46 do i = 1, n
47 a(i) = b
48 end do
49 !$acc end parallel loop
51 call check
52 end subroutine mod_explicit_incr
53 end module m
55 subroutine sub_implicit_incr
56 use const
58 implicit none
59 integer i, x(n), y
60 common /BLOCK/ x, y
62 !$acc parallel loop
63 do i = 1, n
64 x(i) = y
65 end do
66 !$acc end parallel loop
68 call check
69 end subroutine sub_implicit_incr
71 subroutine sub_explicit_incr
72 use const
74 implicit none
75 integer i, x(n), y
76 common /BLOCK/ x, y
78 !$acc parallel loop copy(x(1:n)) copyin(y)
79 do i = 1, n
80 x(i) = y
81 end do
82 !$acc end parallel loop
84 call check
85 end subroutine sub_explicit_incr
87 program main
88 use m
90 implicit none
92 a(:) = -1
93 b = 5
94 call mod_implicit_incr
96 a(:) = -2
97 b = 6
98 call mod_explicit_incr
100 a(:) = -3
101 b = 7
102 call sub_implicit_incr
104 a(:) = -4
105 b = 8
106 call sub_explicit_incr
107 end program main