| ! RUN: %python %S/test_errors.py %s %flang -fopenmp |
| ! OpenMP Version 4.5 |
| ! 2.7.4 workshare Construct |
| ! Checks for OpenMP Parallel constructs enclosed in Workshare constructs |
| |
| module workshare_mod |
| interface assignment(=) |
| module procedure work_assign |
| end interface |
| |
| contains |
| subroutine work_assign(a,b) |
| integer, intent(out) :: a |
| logical, intent(in) :: b(:) |
| end subroutine work_assign |
| |
| integer function my_func() |
| my_func = 10 |
| end function my_func |
| |
| end module workshare_mod |
| |
| program omp_workshare |
| use workshare_mod |
| |
| integer, parameter :: n = 10 |
| integer :: i, j, a(10), b(10) |
| integer, pointer :: p |
| integer, target :: t |
| logical :: l(10) |
| real :: aa(n,n), bb(n,n), cc(n,n), dd(n,n), ee(n,n), ff(n,n) |
| |
| !$omp workshare |
| |
| !$omp parallel |
| p => t |
| a = l |
| !$omp single |
| ee = ff |
| !$omp end single |
| !$omp end parallel |
| |
| !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region |
| !$omp parallel sections |
| !$omp section |
| aa = my_func() |
| !$omp end parallel sections |
| |
| !$omp parallel do |
| do i = 1, 10 |
| b(i) = my_func() + i |
| end do |
| !$omp end parallel do |
| |
| !$omp parallel |
| where (dd .lt. 5) dd = aa * my_func() |
| !$omp end parallel |
| |
| !$omp end workshare |
| |
| end program omp_workshare |