module m implicit none (type, external) integer :: r, r2, r3 = 1 interface logical function bar(); end end interface contains subroutine foo integer :: i, j, k i = 0; j = 0; k = 0 !$omp parallel if (bar ()) then !$omp cancel parallel end if !$omp scope reduction (+:r) private (i) !$omp scope reduction (+:r2) private (j) !$omp single i = 1; j = 2; r = r + 1 r2 = r2 + 1 !$omp end single nowait !$omp end scope !$omp end scope !$omp end parallel !$omp parallel if (bar ()) then !$omp cancel parallel end if !$omp scope reduction (task, +:r) private (i) !$omp scope reduction (task, *:r3) r = r + 1 r3 = r3 + 1 !$omp end scope !$omp end scope !$omp end parallel end end module