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