51 lines · plain
1! RUN: %python %S/../test_errors.py %s %flang -fopenmp2! OpenMP Version 4.53! 2.7.4 workshare Construct4! Checks for OpenMP Workshare construct5 6subroutine omp_workshare(aa, bb, cc, dd, ee, ff, n)7 integer i, j, n, a(10), b(10)8 integer, pointer :: p9 integer, target :: t10 real aa(n,n), bb(n,n), cc(n,n), dd(n,n), ee(n,n), ff(n,n)11 12 !ERROR: The structured block in a WORKSHARE construct may consist of only SCALAR or ARRAY assignments, FORALL or WHERE statements, FORALL, WHERE, ATOMIC, CRITICAL or PARALLEL constructs13 !$omp workshare14 p => t15 16 !$omp parallel17 cc = dd18 !$omp end parallel19 20 !ERROR: OpenMP constructs enclosed in WORKSHARE construct may consist of ATOMIC, CRITICAL or PARALLEL constructs only21 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region22 !$omp parallel workshare23 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region24 !$omp single25 ee = ff26 !$omp end single27 !$omp end parallel workshare28 29 where (aa .ne. 0) cc = bb / aa30 31 where (b .lt. 2) b = sum(a)32 33 where (aa .ge. 2.0)34 cc = aa + bb35 elsewhere36 cc = dd + ee37 end where38 39 forall (i = 1:10, n > i) a(i) = b(i)40 41 forall (j = 1:10)42 a(j) = a(j) + b(j)43 end forall44 45 !$omp atomic update46 j = j + sum(a)47 48 !$omp end workshare49 50end subroutine omp_workshare51