! { dg-do run } integer, dimension (6, 6) :: a character (36) :: c integer nthreads a = 9 nthreads = -1 call foo (a (2:4, 3:5), nthreads) if (nthreads .eq. 3) then write (c, '(36i1)') a if (c .ne. '999999999999966699966699966699999999') call abort end if contains subroutine foo (b, nthreads) use omp_lib integer, dimension (3:, 5:) :: b integer :: err, nthreads b = 0 err = 0 !$omp parallel num_threads (3) reduction (+:b) if (any (b .ne. 0)) then !$omp atomic err = err + 1 end if !$omp master nthreads = omp_get_num_threads () !$omp end master b = 2 !$omp end parallel if (err .gt. 0) call abort end subroutine foo end