[LLVM] Fix Maintainers.md formatting (NFC)
[llvm-project.git] / flang / test / Semantics / OpenMP / ordered01.f90
blob12543acb2916b36f4ff263530b7338709b51f06e
1 ! RUN: %python %S/../test_errors.py %s %flang -fopenmp
2 ! OpenMP Version 5.1
3 ! Check OpenMP construct validity for the following directives:
4 ! 2.19.9 Ordered Construct
6 program main
7 integer :: i, N = 10
8 real :: a, arrayA(10), arrayB(10), arrayC(10)
9 real, external :: foo, bar, baz
11 !$omp do ordered
12 do i = 1, N
13 !ERROR: At most one THREADS clause can appear on the ORDERED directive
14 !$omp ordered threads threads
15 arrayA(i) = i
16 !$omp end ordered
17 end do
18 !$omp end do
20 !$omp simd
21 do i = 1, N
22 !ERROR: At most one SIMD clause can appear on the ORDERED directive
23 !$omp ordered simd simd
24 arrayA(i) = i
25 !$omp end ordered
26 end do
27 !$omp end simd
29 !$omp do simd ordered
30 do i = 1, N
31 !ERROR: At most one SIMD clause can appear on the ORDERED directive
32 !$omp ordered simd simd
33 arrayA(i) = i
34 !$omp end ordered
35 end do
36 !$omp end do simd
38 !$omp do ordered(1)
39 do i = 2, N
40 !ERROR: Only SINK or SOURCE dependence types are allowed when ORDERED construct is a standalone construct with no ORDERED region
41 !ERROR: At most one SOURCE dependence type can appear on the ORDERED directive
42 !$omp ordered depend(source) depend(inout: arrayA) depend(source)
43 arrayA(i) = foo(i)
44 !ERROR: The SINK and SOURCE dependence types are mutually exclusive
45 !ERROR: At most one SOURCE dependence type can appear on the ORDERED directive
46 !$omp ordered depend(sink: i - 1) depend(source) depend(source)
47 arrayB(i) = bar(arrayA(i), arrayB(i-1))
48 !ERROR: Only SINK or SOURCE dependence types are allowed when ORDERED construct is a standalone construct with no ORDERED region
49 !ERROR: Only SINK or SOURCE dependence types are allowed when ORDERED construct is a standalone construct with no ORDERED region
50 !$omp ordered depend(out: arrayC) depend(in: arrayB)
51 arrayC(i) = baz(arrayB(i-1))
52 end do
53 !$omp end do
55 !$omp do ordered(1)
56 do i = 2, N
57 !ERROR: DEPEND clauses are not allowed when ORDERED construct is a block construct with an ORDERED region
58 !$omp ordered depend(source)
59 arrayA(i) = foo(i)
60 !$omp end ordered
61 !ERROR: DEPEND clauses are not allowed when ORDERED construct is a block construct with an ORDERED region
62 !$omp ordered depend(sink: i - 1)
63 arrayB(i) = bar(arrayA(i), arrayB(i-1))
64 !$omp end ordered
65 end do
66 !$omp end do
68 contains
69 subroutine work1()
70 !ERROR: THREADS and SIMD clauses are not allowed when ORDERED construct is a standalone construct with no ORDERED region
71 !$omp ordered simd
72 end subroutine work1
74 subroutine work2()
75 !ERROR: THREADS and SIMD clauses are not allowed when ORDERED construct is a standalone construct with no ORDERED region
76 !$omp ordered threads
77 end subroutine work2
79 end program main