! { dg-do run } ! Fortran version of libgomp.c-c++-common/lastprivate-conditional-10.c module m implicit none integer :: v = 0 integer :: x = 0 contains integer function foo (a) integer, contiguous :: a(0:) integer i !$omp parallel do simd lastprivate (conditional: x) schedule(simd : static) if (simd : .false.) do i = 0, 127 if (a(i) /= 0) x = a(i) end do foo = x end integer function bar (a, b) integer, contiguous :: a(0:), b(0:) integer :: i !$omp parallel !$omp do simd lastprivate (conditional: x, v) schedule(static, 16) simdlen (1) do i = 16, 127 if (a(i) /= 0) x = a(i); if (b(i) /= 0) v = b(i) + 10; end do !$omp end parallel bar = x end integer function baz (a) integer, contiguous :: a(0:) integer :: i !$omp parallel do simd if (simd : .false.) lastprivate (conditional: x) schedule(simd : dynamic, 16) do i = 0, 127 if (a(i) /= 0) x = a(i) + 5 end do baz = x end end module m program main use m implicit none integer :: a(0:127), b(0:127), i do i = 0, 127 if (mod(i, 11) == 2) then a(i) = i + 10 else a(i) = 0 endif if (mod(i, 13) == 5) then b(i) = i * 2 else b(i) = 0 endif end do if (foo (a) /= 133) stop 1 if (bar (b, a) /= 244 .or. v /= 143) stop 2 if (baz (b) /= 249) stop 3 end