1! RUN: %python %S/../test_errors.py %s %flang -fopenmp 2! OpenMP Version 4.5 3! 2.7.4 workshare Construct 4! Checks for OpenMP Workshare construct 5 6subroutine omp_workshare(aa, bb, cc, dd, ee, ff, n) 7 integer i, j, n, a(10), b(10) 8 integer, pointer :: p 9 integer, target :: t 10 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 constructs 13 !$omp workshare 14 p => t 15 16 !$omp parallel 17 cc = dd 18 !$omp end parallel 19 20 !ERROR: OpenMP constructs enclosed in WORKSHARE construct may consist of ATOMIC, CRITICAL or PARALLEL constructs only 21 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region 22 !$omp parallel workshare 23 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region 24 !$omp single 25 ee = ff 26 !$omp end single 27 !$omp end parallel workshare 28 29 where (aa .ne. 0) cc = bb / aa 30 31 where (b .lt. 2) b = sum(a) 32 33 where (aa .ge. 2.0) 34 cc = aa + bb 35 elsewhere 36 cc = dd + ee 37 end where 38 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 forall 44 45 !$omp atomic update 46 j = j + sum(a) 47 48 !$omp end workshare 49 50end subroutine omp_workshare 51