xref: /openbsd-src/gnu/gcc/libgomp/testsuite/libgomp.fortran/workshare1.f90 (revision 404b540a9034ac75a6199ad1a32d1bbc7a0d4210)
1*404b540aSrobertfunction foo ()
2*404b540aSrobert  integer :: foo
3*404b540aSrobert  logical :: foo_seen
4*404b540aSrobert  common /foo_seen/ foo_seen
5*404b540aSrobert  foo_seen = .true.
6*404b540aSrobert  foo = 3
7*404b540aSrobertend
8*404b540aSrobertfunction bar ()
9*404b540aSrobert  integer :: bar
10*404b540aSrobert  logical :: bar_seen
11*404b540aSrobert  common /bar_seen/ bar_seen
12*404b540aSrobert  bar_seen = .true.
13*404b540aSrobert  bar = 3
14*404b540aSrobertend
15*404b540aSrobert  integer :: a (10), b (10), foo, bar
16*404b540aSrobert  logical :: foo_seen, bar_seen
17*404b540aSrobert  common /foo_seen/ foo_seen
18*404b540aSrobert  common /bar_seen/ bar_seen
19*404b540aSrobert
20*404b540aSrobert  foo_seen = .false.
21*404b540aSrobert  bar_seen = .false.
22*404b540aSrobert!$omp parallel workshare if (foo () .gt. 2) num_threads (bar () + 1)
23*404b540aSrobert  a = 10
24*404b540aSrobert  b = 20
25*404b540aSrobert  a(1:5) = max (a(1:5), b(1:5))
26*404b540aSrobert!$omp end parallel workshare
27*404b540aSrobert  if (any (a(1:5) .ne. 20)) call abort
28*404b540aSrobert  if (any (a(6:10) .ne. 10)) call abort
29*404b540aSrobert  if (.not. foo_seen .or. .not. bar_seen) call abort
30*404b540aSrobertend
31