[LoopReroll] Add an extra defensive check to avoid SCEV assertion.
[llvm-project.git] / flang / test / Semantics / omp-workshare04.f90
blob745dc9f4d49a624a08181a47de055d4adcafa2ab
1 ! RUN: %S/test_errors.sh %s %t %flang -fopenmp
2 ! REQUIRES: shell
3 ! OpenMP Version 4.5
4 ! 2.7.4 workshare Construct
5 ! Checks for OpenMP Workshare construct
7 subroutine omp_workshare(aa, bb, cc, dd, ee, ff, n)
8 integer i, j, n, a(10), b(10)
9 integer, pointer :: p
10 integer, target :: t
11 real aa(n,n), bb(n,n), cc(n,n), dd(n,n), ee(n,n), ff(n,n)
13 !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
14 !$omp workshare
15 p => t
17 !$omp parallel
18 cc = dd
19 !$omp end parallel
21 !ERROR: OpenMP constructs enclosed in WORKSHARE construct may consist of ATOMIC, CRITICAL or PARALLEL constructs only
22 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region
23 !$omp parallel workshare
24 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region
25 !$omp single
26 ee = ff
27 !$omp end single
28 !$omp end parallel workshare
30 where (aa .ne. 0) cc = bb / aa
32 where (b .lt. 2) b = sum(a)
34 where (aa .ge. 2.0)
35 cc = aa + bb
36 elsewhere
37 cc = dd + ee
38 end where
40 forall (i = 1:10, n > i) a(i) = b(i)
42 forall (j = 1:10)
43 a(j) = a(j) + b(j)
44 end forall
46 !$omp atomic update
47 j = j + sum(a)
49 !$omp end workshare
51 end subroutine omp_workshare