1! { dg-do run } 2! 3! PR fortran/94690 4! PR middle-end/66199 5 6module m 7 implicit none 8 integer u(0:1023), v(0:1023), w(0:1023) 9 !$omp declare target (u, v, w) 10 11contains 12 13integer function f1 (a, b) 14 integer :: a, b, d 15 !$omp target map(from: d) 16 !$omp teams default(none) shared(a, b, d, u, v, w) 17 !$omp distribute simd firstprivate (a, b) 18 do d = a, b-1 19 u(d) = v(d) + w(d) 20 end do 21 !$omp end teams 22 !$omp end target 23 f1 = d 24end 25 26integer function f2 (a, b, c) 27 integer a, b, c, d, e 28 !$omp target map(from: d, e) 29 !$omp teams default(none) firstprivate (a, b, c) shared(d, e, u, v, w) 30 !$omp distribute simd linear(d) lastprivate(e) 31 do d = a, b-1 32 u(d) = v(d) + w(d) 33 e = c + d * 5 34 end do 35 !$omp end teams 36 !$omp end target 37 f2 = d + e 38end 39 40integer function f3 (a1, b1, a2, b2) 41 integer a1, b1, a2, b2, d1, d2 42 !$omp target map(from: d1, d2) 43 !$omp teams default(none) shared(a1, b1, a2, b2, d1, d2, u, v, w) 44 !$omp distribute simd firstprivate (a1, b1, a2, b2) lastprivate(d1, d2) collapse(2) 45 do d1 = a1, b1-1 46 do d2 = a2, b2-1 47 u(d1 * 32 + d2) = v(d1 * 32 + d2) + w(d1 * 32 + d2) 48 end do 49 end do 50 !$omp end teams 51 !$omp end target 52 f3 = d1 + d2 53end 54 55integer function f4 (a1, b1, a2, b2) 56 integer a1, b1, a2, b2, d1, d2 57 !$omp target map(from: d1, d2) 58 !$omp teams default(none) firstprivate (a1, b1, a2, b2) shared(d1, d2, u, v, w) 59 !$omp distribute simd collapse(2) 60 do d1 = a1, b1-1 61 do d2 = a2, b2-1 62 u(d1 * 32 + d2) = v(d1 * 32 + d2) + w(d1 * 32 + d2) 63 end do 64 end do 65 !$omp end teams 66 !$omp end target 67 f4 = d1 + d2 68end 69end module m 70 71use m 72 if (f1 (0, 1024) /= 1024) stop 1 73 if (f2 (0, 1024, 17) /= 1024 + (17 + 5 * 1023)) stop 2 74 if (f3 (0, 32, 0, 32) /= 64) stop 3 75 if (f4 (0, 32, 0, 32) /= 64) stop 4 76end 77