1! { dg-do run } 2! { dg-options "-std=legacy" } 3 4 call test 5contains 6 subroutine check (x, y, l) 7 integer :: x, y 8 logical :: l 9 l = l .or. x .ne. y 10 end subroutine check 11 12 subroutine foo (c, d, e, f, g, h, i, j, k, n) 13 use omp_lib 14 interface 15 subroutine GOMP_barrier () bind(c, name="GOMP_barrier") 16 end subroutine 17 end interface 18 integer :: n 19 character (len = *) :: c 20 character (len = n) :: d 21 integer, dimension (2, 3:5, n) :: e 22 integer, dimension (2, 3:n, n) :: f 23 character (len = *), dimension (5, 3:n) :: g 24 character (len = n), dimension (5, 3:n) :: h 25 real, dimension (:, :, :) :: i 26 double precision, dimension (3:, 5:, 7:) :: j 27 integer, dimension (:, :, :) :: k 28 logical :: l 29 integer :: p, q, r 30 character (len = n) :: s 31 integer, dimension (2, 3:5, n) :: t 32 integer, dimension (2, 3:n, n) :: u 33 character (len = n), dimension (5, 3:n) :: v 34 character (len = 2 * n + 24) :: w 35 integer :: x, z, z2 36 character (len = 1) :: y 37 s = 'PQRSTUV' 38 forall (p = 1:2, q = 3:5, r = 1:7) t(p, q, r) = -10 + p - q + 2 * r 39 forall (p = 1:2, q = 3:7, r = 1:7) u(p, q, r) = 30 - p + q - 2 * r 40 forall (p = 1:5, q = 3:7, p + q .le. 8) v(p, q) = '_+|/Oo_' 41 forall (p = 1:5, q = 3:7, p + q .gt. 8) v(p, q) = '///|||!' 42 l = .false. 43 call omp_set_dynamic (.false.) 44 call omp_set_num_threads (6) 45!$omp parallel do default (none) firstprivate (c, d, e, f, g, h, i, j, k) & 46!$omp & firstprivate (s, t, u, v) reduction (.or.:l) num_threads (6) & 47!$omp private (p, q, r, w, x, y) schedule (static) shared (z2) & 48!$omp lastprivate (c, d, e, f, g, h, i, j, k, s, t, u, v) 49 do 110 z = 0, omp_get_num_threads () - 1 50 if (omp_get_thread_num () .eq. 0) z2 = omp_get_num_threads () 51 l = l .or. c .ne. 'abcdefghijkl' 52 l = l .or. d .ne. 'ABCDEFG' 53 l = l .or. s .ne. 'PQRSTUV' 54 do 100, p = 1, 2 55 do 100, q = 3, 7 56 do 100, r = 1, 7 57 if (q .lt. 6) l = l .or. e(p, q, r) .ne. 5 + p + q + 2 * r 58 l = l .or. f(p, q, r) .ne. 25 + p + q + 2 * r 59 if (r .lt. 6 .and. q + r .le. 8) l = l .or. g(r, q) .ne. '0123456789AB' 60 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. g(r, q) .ne. '9876543210ZY' 61 if (r .lt. 6 .and. q + r .le. 8) l = l .or. h(r, q) .ne. '0123456' 62 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. h(r, q) .ne. '9876543' 63 if (q .lt. 6) l = l .or. t(p, q, r) .ne. -10 + p - q + 2 * r 64 l = l .or. u(p, q, r) .ne. 30 - p + q - 2 * r 65 if (r .lt. 6 .and. q + r .le. 8) l = l .or. v(r, q) .ne. '_+|/Oo_' 66 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. v(r, q) .ne. '///|||!' 67100 continue 68 do 101, p = 3, 5 69 do 101, q = 2, 6 70 do 101, r = 1, 7 71 l = l .or. i(p - 2, q - 1, r) .ne. 7.5 * p * q * r 72 l = l .or. j(p, q + 3, r + 6) .ne. 9.5 * p * q * r 73101 continue 74 do 102, p = 1, 5 75 do 102, q = 4, 6 76 l = l .or. k(p, 1, q - 3) .ne. 19 + p + 7 + 3 * q 77102 continue 78 x = omp_get_thread_num () 79 w = '' 80 if (x .eq. 0) w = 'thread0thr_number_0THREAD0THR_NUMBER_0' 81 if (x .eq. 1) w = 'thread1thr_number_1THREAD1THR_NUMBER_1' 82 if (x .eq. 2) w = 'thread2thr_number_2THREAD2THR_NUMBER_2' 83 if (x .eq. 3) w = 'thread3thr_number_3THREAD3THR_NUMBER_3' 84 if (x .eq. 4) w = 'thread4thr_number_4THREAD4THR_NUMBER_4' 85 if (x .eq. 5) w = 'thread5thr_number_5THREAD5THR_NUMBER_5' 86 c = w(8:19) 87 d = w(1:7) 88 forall (p = 1:2, q = 3:5, r = 1:7) e(p, q, r) = 5 * x + p + q + 2 * r 89 forall (p = 1:2, q = 3:7, r = 1:7) f(p, q, r) = 25 * x + p + q + 2 * r 90 forall (p = 1:5, q = 3:7, p + q .le. 8) g(p, q) = w(8:19) 91 forall (p = 1:5, q = 3:7, p + q .gt. 8) g(p, q) = w(27:38) 92 forall (p = 1:5, q = 3:7, p + q .le. 8) h(p, q) = w(1:7) 93 forall (p = 1:5, q = 3:7, p + q .gt. 8) h(p, q) = w(20:26) 94 forall (p = 3:5, q = 2:6, r = 1:7) i(p - 2, q - 1, r) = (7.5 + x) * p * q * r 95 forall (p = 3:5, q = 2:6, r = 1:7) j(p, q + 3, r + 6) = (9.5 + x) * p * q * r 96 forall (p = 1:5, q = 7:7, r = 4:6) k(p, q - 6, r - 3) = 19 + x + p + q + 3 * r 97 s = w(20:26) 98 forall (p = 1:2, q = 3:5, r = 1:7) t(p, q, r) = -10 + x + p - q + 2 * r 99 forall (p = 1:2, q = 3:7, r = 1:7) u(p, q, r) = 30 - x - p + q - 2 * r 100 forall (p = 1:5, q = 3:7, p + q .le. 8) v(p, q) = w(1:7) 101 forall (p = 1:5, q = 3:7, p + q .gt. 8) v(p, q) = w(20:26) 102 call GOMP_barrier 103 y = '' 104 if (x .eq. 0) y = '0' 105 if (x .eq. 1) y = '1' 106 if (x .eq. 2) y = '2' 107 if (x .eq. 3) y = '3' 108 if (x .eq. 4) y = '4' 109 if (x .eq. 5) y = '5' 110 l = l .or. w(7:7) .ne. y 111 l = l .or. w(19:19) .ne. y 112 l = l .or. w(26:26) .ne. y 113 l = l .or. w(38:38) .ne. y 114 l = l .or. c .ne. w(8:19) 115 l = l .or. d .ne. w(1:7) 116 l = l .or. s .ne. w(20:26) 117 do 103, p = 1, 2 118 do 103, q = 3, 7 119 do 103, r = 1, 7 120 if (q .lt. 6) l = l .or. e(p, q, r) .ne. 5 * x + p + q + 2 * r 121 l = l .or. f(p, q, r) .ne. 25 * x + p + q + 2 * r 122 if (r .lt. 6 .and. q + r .le. 8) l = l .or. g(r, q) .ne. w(8:19) 123 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. g(r, q) .ne. w(27:38) 124 if (r .lt. 6 .and. q + r .le. 8) l = l .or. h(r, q) .ne. w(1:7) 125 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. h(r, q) .ne. w(20:26) 126 if (q .lt. 6) l = l .or. t(p, q, r) .ne. -10 + x + p - q + 2 * r 127 l = l .or. u(p, q, r) .ne. 30 - x - p + q - 2 * r 128 if (r .lt. 6 .and. q + r .le. 8) l = l .or. v(r, q) .ne. w(1:7) 129 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. v(r, q) .ne. w(20:26) 130103 continue 131 do 104, p = 3, 5 132 do 104, q = 2, 6 133 do 104, r = 1, 7 134 l = l .or. i(p - 2, q - 1, r) .ne. (7.5 + x) * p * q * r 135 l = l .or. j(p, q + 3, r + 6) .ne. (9.5 + x) * p * q * r 136104 continue 137 do 105, p = 1, 5 138 do 105, q = 4, 6 139 l = l .or. k(p, 1, q - 3) .ne. 19 + x + p + 7 + 3 * q 140105 continue 141 call check (size (e, 1), 2, l) 142 call check (size (e, 2), 3, l) 143 call check (size (e, 3), 7, l) 144 call check (size (e), 42, l) 145 call check (size (f, 1), 2, l) 146 call check (size (f, 2), 5, l) 147 call check (size (f, 3), 7, l) 148 call check (size (f), 70, l) 149 call check (size (g, 1), 5, l) 150 call check (size (g, 2), 5, l) 151 call check (size (g), 25, l) 152 call check (size (h, 1), 5, l) 153 call check (size (h, 2), 5, l) 154 call check (size (h), 25, l) 155 call check (size (i, 1), 3, l) 156 call check (size (i, 2), 5, l) 157 call check (size (i, 3), 7, l) 158 call check (size (i), 105, l) 159 call check (size (j, 1), 4, l) 160 call check (size (j, 2), 5, l) 161 call check (size (j, 3), 7, l) 162 call check (size (j), 140, l) 163 call check (size (k, 1), 5, l) 164 call check (size (k, 2), 1, l) 165 call check (size (k, 3), 3, l) 166 call check (size (k), 15, l) 167110 continue 168!$omp end parallel do 169 if (l) STOP 1 170 if (z2 == 6) then 171 x = 5 172 w = 'thread5thr_number_5THREAD5THR_NUMBER_5' 173 y = '5' 174 l = l .or. w(7:7) .ne. y 175 l = l .or. w(19:19) .ne. y 176 l = l .or. w(26:26) .ne. y 177 l = l .or. w(38:38) .ne. y 178 l = l .or. c .ne. w(8:19) 179 l = l .or. d .ne. w(1:7) 180 l = l .or. s .ne. w(20:26) 181 do 113, p = 1, 2 182 do 113, q = 3, 7 183 do 113, r = 1, 7 184 if (q .lt. 6) l = l .or. e(p, q, r) .ne. 5 * x + p + q + 2 * r 185 l = l .or. f(p, q, r) .ne. 25 * x + p + q + 2 * r 186 if (r .lt. 6 .and. q + r .le. 8) l = l .or. g(r, q) .ne. w(8:19) 187 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. g(r, q) .ne. w(27:38) 188 if (r .lt. 6 .and. q + r .le. 8) l = l .or. h(r, q) .ne. w(1:7) 189 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. h(r, q) .ne. w(20:26) 190 if (q .lt. 6) l = l .or. t(p, q, r) .ne. -10 + x + p - q + 2 * r 191 l = l .or. u(p, q, r) .ne. 30 - x - p + q - 2 * r 192 if (r .lt. 6 .and. q + r .le. 8) l = l .or. v(r, q) .ne. w(1:7) 193 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. v(r, q) .ne. w(20:26) 194113 continue 195 do 114, p = 3, 5 196 do 114, q = 2, 6 197 do 114, r = 1, 7 198 l = l .or. i(p - 2, q - 1, r) .ne. (7.5 + x) * p * q * r 199 l = l .or. j(p, q + 3, r + 6) .ne. (9.5 + x) * p * q * r 200114 continue 201 do 115, p = 1, 5 202 do 115, q = 4, 6 203 l = l .or. k(p, 1, q - 3) .ne. 19 + x + p + 7 + 3 * q 204115 continue 205 if (l) STOP 2 206 end if 207 end subroutine foo 208 209 subroutine test 210 character (len = 12) :: c 211 character (len = 7) :: d 212 integer, dimension (2, 3:5, 7) :: e 213 integer, dimension (2, 3:7, 7) :: f 214 character (len = 12), dimension (5, 3:7) :: g 215 character (len = 7), dimension (5, 3:7) :: h 216 real, dimension (3:5, 2:6, 1:7) :: i 217 double precision, dimension (3:6, 2:6, 1:7) :: j 218 integer, dimension (1:5, 7:7, 4:6) :: k 219 integer :: p, q, r 220 c = 'abcdefghijkl' 221 d = 'ABCDEFG' 222 forall (p = 1:2, q = 3:5, r = 1:7) e(p, q, r) = 5 + p + q + 2 * r 223 forall (p = 1:2, q = 3:7, r = 1:7) f(p, q, r) = 25 + p + q + 2 * r 224 forall (p = 1:5, q = 3:7, p + q .le. 8) g(p, q) = '0123456789AB' 225 forall (p = 1:5, q = 3:7, p + q .gt. 8) g(p, q) = '9876543210ZY' 226 forall (p = 1:5, q = 3:7, p + q .le. 8) h(p, q) = '0123456' 227 forall (p = 1:5, q = 3:7, p + q .gt. 8) h(p, q) = '9876543' 228 forall (p = 3:5, q = 2:6, r = 1:7) i(p, q, r) = 7.5 * p * q * r 229 forall (p = 3:6, q = 2:6, r = 1:7) j(p, q, r) = 9.5 * p * q * r 230 forall (p = 1:5, q = 7:7, r = 4:6) k(p, q, r) = 19 + p + q + 3 * r 231 call foo (c, d, e, f, g, h, i, j, k, 7) 232 end subroutine test 233end 234