! { dg-do run } !$ use omp_lib character (len = 8) :: h character (len = 9) :: i h = '01234567' i = 'ABCDEFGHI' call test (h, i, 9) contains subroutine test (p, q, n) character (len = *) :: p character (len = n) :: q character (len = n) :: r character (len = n) :: t character (len = n) :: u integer, dimension (n + 4) :: s logical :: l integer :: m r = '' if (n .gt. 8) r = 'jklmnopqr' do m = 1, n + 4 s(m) = m end do u = 'abc' l = .false. !$omp parallel firstprivate (p, q, r) private (t, m) reduction (.or.:l) & !$omp & num_threads (2) do m = 1, 13 if (s(m) .ne. m) l = .true. end do m = omp_get_thread_num () l = l .or. p .ne. '01234567' .or. q .ne. 'ABCDEFGHI' l = l .or. r .ne. 'jklmnopqr' .or. u .ne. 'abc' !$omp barrier if (m .eq. 0) then p = 'A' q = 'B' r = 'C' t = '123' u = '987654321' else if (m .eq. 1) then p = 'D' q = 'E' r = 'F' t = '456' s = m end if !$omp barrier l = l .or. u .ne. '987654321' if (any (s .ne. 1)) l = .true. if (m .eq. 0) then l = l .or. p .ne. 'A' .or. q .ne. 'B' .or. r .ne. 'C' l = l .or. t .ne. '123' else l = l .or. p .ne. 'D' .or. q .ne. 'E' .or. r .ne. 'F' l = l .or. t .ne. '456' end if !$omp end parallel if (l) call abort end subroutine test end