43 lines
942 B
Fortran
43 lines
942 B
Fortran
! { dg-do run }
|
|
|
|
integer :: a, b, c
|
|
a = 1
|
|
b = 2
|
|
c = 3
|
|
call foo
|
|
if (a .ne. 7) stop 1
|
|
contains
|
|
subroutine foo
|
|
use omp_lib
|
|
logical :: l
|
|
l = .false.
|
|
!$omp parallel shared (a) private (b) firstprivate (c) &
|
|
!$omp num_threads (2) reduction (.or.:l)
|
|
if (a .ne. 1 .or. c .ne. 3) l = .true.
|
|
!$omp barrier
|
|
if (omp_get_thread_num () .eq. 0) then
|
|
a = 4
|
|
b = 5
|
|
c = 6
|
|
end if
|
|
!$omp barrier
|
|
if (omp_get_thread_num () .eq. 1) then
|
|
if (a .ne. 4 .or. c .ne. 3) l = .true.
|
|
a = 7
|
|
b = 8
|
|
c = 9
|
|
else if (omp_get_num_threads () .eq. 1) then
|
|
a = 7
|
|
end if
|
|
!$omp barrier
|
|
if (omp_get_thread_num () .eq. 0) then
|
|
if (a .ne. 7 .or. b .ne. 5 .or. c .ne. 6) l = .true.
|
|
end if
|
|
!$omp barrier
|
|
if (omp_get_thread_num () .eq. 1) then
|
|
if (a .ne. 7 .or. b .ne. 8 .or. c .ne. 9) l = .true.
|
|
end if
|
|
!$omp end parallel
|
|
if (l) stop 2
|
|
end subroutine foo
|
|
end
|