1! { dg-do run }
2!
3! Test data located inside common blocks.  This test does not exercise
4! ACC DECLARE.
5
6module const
7  integer, parameter :: n = 100
8end module const
9
10subroutine check
11  use const
12
13  implicit none
14  integer i, x(n), y
15  common /BLOCK/ x, y
16
17  do i = 1, n
18     if (x(i) .ne. y) stop 1
19  end do
20end subroutine check
21
22module m
23  use const
24  integer a(n), b
25  common /BLOCK/ a, b
26
27contains
28  subroutine mod_implicit_incr
29    implicit none
30    integer i
31
32    !$acc parallel loop
33    do i = 1, n
34       a(i) = b
35    end do
36    !$acc end parallel loop
37
38    call check
39  end subroutine mod_implicit_incr
40
41  subroutine mod_explicit_incr
42    implicit none
43    integer i
44
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
50
51    call check
52  end subroutine mod_explicit_incr
53end module m
54
55subroutine sub_implicit_incr
56  use const
57
58  implicit none
59  integer i, x(n), y
60  common /BLOCK/ x, y
61
62  !$acc parallel loop
63  do i = 1, n
64     x(i) = y
65  end do
66  !$acc end parallel loop
67
68  call check
69end subroutine sub_implicit_incr
70
71subroutine sub_explicit_incr
72  use const
73
74  implicit none
75  integer i, x(n), y
76  common /BLOCK/ x, y
77
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
83
84  call check
85end subroutine sub_explicit_incr
86
87program main
88  use m
89
90  implicit none
91
92  a(:) = -1
93  b = 5
94  call mod_implicit_incr
95
96  a(:) = -2
97  b = 6
98  call mod_explicit_incr
99
100  a(:) = -3
101  b = 7
102  call sub_implicit_incr
103
104  a(:) = -4
105  b = 8
106  call sub_explicit_incr
107end program main
108