xref: /llvm-project/flang/test/Semantics/OpenMP/clause-validity01.f90 (revision 03cbe42627c7a7940b47cc1a2cda0120bc9c6d5e)
1fb5fd2d8SMichael Klemm! REQUIRES: openmp_runtime
2fb5fd2d8SMichael Klemm
3612f8ec7SShashwathiNavada! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags %openmp_module_flag -fopenmp-version=51
43323a4bdSKiran Chandramohanuse omp_lib
53323a4bdSKiran Chandramohan! Check OpenMP clause validity for the following directives:
63323a4bdSKiran Chandramohan!
73323a4bdSKiran Chandramohan!    2.5 PARALLEL construct
83323a4bdSKiran Chandramohan!    2.7.1 Loop construct
93323a4bdSKiran Chandramohan!    ...
103323a4bdSKiran Chandramohan
11f36a2547SRaghu Maddhipatla  use iso_c_binding
123323a4bdSKiran Chandramohan  integer :: b = 128
13f36a2547SRaghu Maddhipatla  integer, allocatable :: allc
14f36a2547SRaghu Maddhipatla  type(C_PTR) :: cpt
153323a4bdSKiran Chandramohan  integer :: z, c = 32
163323a4bdSKiran Chandramohan  integer, parameter :: num = 16
173323a4bdSKiran Chandramohan  real(8) :: arrayA(256), arrayB(512)
183323a4bdSKiran Chandramohan
193323a4bdSKiran Chandramohan  integer(omp_memspace_handle_kind) :: xy_memspace = omp_default_mem_space
203323a4bdSKiran Chandramohan  type(omp_alloctrait) :: xy_traits(1) = [omp_alloctrait(omp_atk_alignment,64)]
213323a4bdSKiran Chandramohan  integer(omp_allocator_handle_kind) :: xy_alloc
223323a4bdSKiran Chandramohan  xy_alloc = omp_init_allocator(xy_memspace, 1, xy_traits)
233323a4bdSKiran Chandramohan
243323a4bdSKiran Chandramohan  arrayA = 1.414
253323a4bdSKiran Chandramohan  arrayB = 3.14
263323a4bdSKiran Chandramohan  N = 1024
273323a4bdSKiran Chandramohan
283323a4bdSKiran Chandramohan! 2.5 parallel-clause -> if-clause |
293323a4bdSKiran Chandramohan!                        num-threads-clause |
303323a4bdSKiran Chandramohan!                        default-clause |
313323a4bdSKiran Chandramohan!                        private-clause |
323323a4bdSKiran Chandramohan!                        firstprivate-clause |
333323a4bdSKiran Chandramohan!                        shared-clause |
343323a4bdSKiran Chandramohan!                        copyin-clause |
353323a4bdSKiran Chandramohan!                        reduction-clause |
363323a4bdSKiran Chandramohan!                        proc-bind-clause |
373323a4bdSKiran Chandramohan!                        allocate-clause
383323a4bdSKiran Chandramohan
393323a4bdSKiran Chandramohan  !$omp parallel
403323a4bdSKiran Chandramohan  do i = 1, N
413323a4bdSKiran Chandramohan     a = 3.14
423323a4bdSKiran Chandramohan  enddo
433323a4bdSKiran Chandramohan  !$omp end parallel
443323a4bdSKiran Chandramohan
453323a4bdSKiran Chandramohan  !$omp parallel private(b) allocate(b)
463323a4bdSKiran Chandramohan  do i = 1, N
473323a4bdSKiran Chandramohan     a = 3.14
483323a4bdSKiran Chandramohan  enddo
493323a4bdSKiran Chandramohan  !$omp end parallel
503323a4bdSKiran Chandramohan
513323a4bdSKiran Chandramohan  !$omp parallel private(c, b) allocate(omp_default_mem_space : b, c)
523323a4bdSKiran Chandramohan  do i = 1, N
533323a4bdSKiran Chandramohan     a = 3.14
543323a4bdSKiran Chandramohan  enddo
553323a4bdSKiran Chandramohan  !$omp end parallel
563323a4bdSKiran Chandramohan
573323a4bdSKiran Chandramohan  !$omp parallel allocate(b) allocate(c) private(b, c)
583323a4bdSKiran Chandramohan  do i = 1, N
593323a4bdSKiran Chandramohan     a = 3.14
603323a4bdSKiran Chandramohan  enddo
613323a4bdSKiran Chandramohan  !$omp end parallel
623323a4bdSKiran Chandramohan
633323a4bdSKiran Chandramohan  !$omp parallel allocate(xy_alloc :b) private(b)
643323a4bdSKiran Chandramohan  do i = 1, N
653323a4bdSKiran Chandramohan     a = 3.14
663323a4bdSKiran Chandramohan  enddo
673323a4bdSKiran Chandramohan  !$omp end parallel
683323a4bdSKiran Chandramohan
693323a4bdSKiran Chandramohan  !$omp task private(b) allocate(b)
703323a4bdSKiran Chandramohan  do i = 1, N
713323a4bdSKiran Chandramohan     z = 2
723323a4bdSKiran Chandramohan  end do
733323a4bdSKiran Chandramohan  !$omp end task
743323a4bdSKiran Chandramohan
753323a4bdSKiran Chandramohan  !$omp teams private(b) allocate(b)
763323a4bdSKiran Chandramohan  do i = 1, N
773323a4bdSKiran Chandramohan     z = 2
783323a4bdSKiran Chandramohan  end do
793323a4bdSKiran Chandramohan  !$omp end teams
803323a4bdSKiran Chandramohan
813323a4bdSKiran Chandramohan  !$omp target private(b) allocate(b)
823323a4bdSKiran Chandramohan  do i = 1, N
833323a4bdSKiran Chandramohan     z = 2
843323a4bdSKiran Chandramohan  end do
853323a4bdSKiran Chandramohan  !$omp end target
863323a4bdSKiran Chandramohan
873323a4bdSKiran Chandramohan  !ERROR: ALLOCATE clause is not allowed on the TARGET DATA directive
883323a4bdSKiran Chandramohan  !$omp target data map(from: b) allocate(b)
893323a4bdSKiran Chandramohan  do i = 1, N
903323a4bdSKiran Chandramohan     z = 2
913323a4bdSKiran Chandramohan  enddo
923323a4bdSKiran Chandramohan  !$omp end target data
933323a4bdSKiran Chandramohan
943323a4bdSKiran Chandramohan  !ERROR: SCHEDULE clause is not allowed on the PARALLEL directive
953323a4bdSKiran Chandramohan  !$omp parallel schedule(static)
963323a4bdSKiran Chandramohan  do i = 1, N
973323a4bdSKiran Chandramohan     a = 3.14
983323a4bdSKiran Chandramohan  enddo
993323a4bdSKiran Chandramohan  !$omp end parallel
1003323a4bdSKiran Chandramohan
1013323a4bdSKiran Chandramohan  !ERROR: COLLAPSE clause is not allowed on the PARALLEL directive
1023323a4bdSKiran Chandramohan  !$omp parallel collapse(2)
1033323a4bdSKiran Chandramohan  do i = 1, N
1043323a4bdSKiran Chandramohan     do j = 1, N
1053323a4bdSKiran Chandramohan        a = 3.14
1063323a4bdSKiran Chandramohan     enddo
1073323a4bdSKiran Chandramohan  enddo
1083323a4bdSKiran Chandramohan  !$omp end parallel
1093323a4bdSKiran Chandramohan
1103323a4bdSKiran Chandramohan  !ERROR: The parameter of the COLLAPSE clause must be a constant positive integer expression
1113323a4bdSKiran Chandramohan  !$omp do collapse(-1)
1123323a4bdSKiran Chandramohan  do i = 1, N
1133323a4bdSKiran Chandramohan    do j = 1, N
1143323a4bdSKiran Chandramohan      a = 3.14
1153323a4bdSKiran Chandramohan    enddo
1163323a4bdSKiran Chandramohan  enddo
1173323a4bdSKiran Chandramohan  !$omp end do
1183323a4bdSKiran Chandramohan
1193323a4bdSKiran Chandramohan  a = 1.0
1203323a4bdSKiran Chandramohan  !$omp parallel firstprivate(a)
1213323a4bdSKiran Chandramohan  do i = 1, N
1223323a4bdSKiran Chandramohan     a = 3.14
1233323a4bdSKiran Chandramohan  enddo
1243323a4bdSKiran Chandramohan  !ERROR: NUM_THREADS clause is not allowed on the END PARALLEL directive
1253323a4bdSKiran Chandramohan  !$omp end parallel num_threads(4)
1263323a4bdSKiran Chandramohan
1273323a4bdSKiran Chandramohan  !ERROR: LASTPRIVATE clause is not allowed on the PARALLEL directive
1283323a4bdSKiran Chandramohan  !ERROR: NUM_TASKS clause is not allowed on the PARALLEL directive
1293323a4bdSKiran Chandramohan  !ERROR: INBRANCH clause is not allowed on the PARALLEL directive
1303323a4bdSKiran Chandramohan  !$omp parallel lastprivate(a) NUM_TASKS(4) inbranch
1313323a4bdSKiran Chandramohan  do i = 1, N
1323323a4bdSKiran Chandramohan     a = 3.14
1333323a4bdSKiran Chandramohan  enddo
1343323a4bdSKiran Chandramohan  !$omp end parallel
1353323a4bdSKiran Chandramohan
1363323a4bdSKiran Chandramohan  !ERROR: At most one NUM_THREADS clause can appear on the PARALLEL directive
1373323a4bdSKiran Chandramohan  !$omp parallel num_threads(2) num_threads(4)
1383323a4bdSKiran Chandramohan  do i = 1, N
1393323a4bdSKiran Chandramohan     a = 3.14
1403323a4bdSKiran Chandramohan  enddo
1413323a4bdSKiran Chandramohan  !$omp end parallel
1423323a4bdSKiran Chandramohan
1433323a4bdSKiran Chandramohan  !ERROR: The parameter of the NUM_THREADS clause must be a positive integer expression
1443323a4bdSKiran Chandramohan  !$omp parallel num_threads(1-4)
1453323a4bdSKiran Chandramohan  do i = 1, N
1463323a4bdSKiran Chandramohan     a = 3.14
1473323a4bdSKiran Chandramohan  enddo
1483323a4bdSKiran Chandramohan  !ERROR: NOWAIT clause is not allowed on the END PARALLEL directive
1493323a4bdSKiran Chandramohan  !$omp end parallel nowait
1503323a4bdSKiran Chandramohan
1513323a4bdSKiran Chandramohan  !$omp parallel num_threads(num-10)
1523323a4bdSKiran Chandramohan  do i = 1, N
1533323a4bdSKiran Chandramohan     a = 3.14
1543323a4bdSKiran Chandramohan  enddo
1553323a4bdSKiran Chandramohan  !$omp end parallel
1563323a4bdSKiran Chandramohan
1573323a4bdSKiran Chandramohan  !$omp parallel num_threads(b+1)
1583323a4bdSKiran Chandramohan  do i = 1, N
1593323a4bdSKiran Chandramohan     a = 3.14
1603323a4bdSKiran Chandramohan  enddo
1613323a4bdSKiran Chandramohan  !$omp end parallel
1623323a4bdSKiran Chandramohan
1633323a4bdSKiran Chandramohan  !$omp parallel
1643323a4bdSKiran Chandramohan  do i = 1, N
1653323a4bdSKiran Chandramohan  enddo
1663323a4bdSKiran Chandramohan  !ERROR: Unmatched END TARGET directive
1673323a4bdSKiran Chandramohan  !$omp end target
1683323a4bdSKiran Chandramohan
1693323a4bdSKiran Chandramohan  ! OMP 5.0 - 2.6 Restriction point 1
1703323a4bdSKiran Chandramohan  outofparallel: do k =1, 10
1713323a4bdSKiran Chandramohan  !$omp parallel
1723323a4bdSKiran Chandramohan  !$omp do
1733323a4bdSKiran Chandramohan  outer: do i=0, 10
1743323a4bdSKiran Chandramohan    inner: do j=1, 10
1753323a4bdSKiran Chandramohan      exit
176977cb5d1SKiran Chandramohan      !ERROR: EXIT statement terminates associated loop of an OpenMP DO construct
1773323a4bdSKiran Chandramohan      exit outer
1783323a4bdSKiran Chandramohan      !ERROR: EXIT to construct 'outofparallel' outside of PARALLEL construct is not allowed
1793323a4bdSKiran Chandramohan      !ERROR: EXIT to construct 'outofparallel' outside of DO construct is not allowed
1803323a4bdSKiran Chandramohan      exit outofparallel
1813323a4bdSKiran Chandramohan    end do inner
1823323a4bdSKiran Chandramohan  end do outer
1833323a4bdSKiran Chandramohan  !$omp end do
1843323a4bdSKiran Chandramohan  !$omp end parallel
1853323a4bdSKiran Chandramohan  end do outofparallel
1863323a4bdSKiran Chandramohan
1873323a4bdSKiran Chandramohan! 2.7.1  do-clause -> private-clause |
1883323a4bdSKiran Chandramohan!                     firstprivate-clause |
1893323a4bdSKiran Chandramohan!                     lastprivate-clause |
1903323a4bdSKiran Chandramohan!                     linear-clause |
1913323a4bdSKiran Chandramohan!                     reduction-clause |
1923323a4bdSKiran Chandramohan!                     schedule-clause |
1933323a4bdSKiran Chandramohan!                     collapse-clause |
1943323a4bdSKiran Chandramohan!                     ordered-clause
1953323a4bdSKiran Chandramohan
1963323a4bdSKiran Chandramohan  !ERROR: When SCHEDULE clause has AUTO specified, it must not have chunk size specified
1973323a4bdSKiran Chandramohan  !ERROR: At most one SCHEDULE clause can appear on the DO directive
1983323a4bdSKiran Chandramohan  !ERROR: When SCHEDULE clause has RUNTIME specified, it must not have chunk size specified
1993323a4bdSKiran Chandramohan  !$omp do schedule(auto, 2) schedule(runtime, 2)
2003323a4bdSKiran Chandramohan  do i = 1, N
2013323a4bdSKiran Chandramohan     a = 3.14
2023323a4bdSKiran Chandramohan  enddo
2033323a4bdSKiran Chandramohan
2043323a4bdSKiran Chandramohan  !ERROR: A modifier may not be specified in a LINEAR clause on the DO directive
2053323a4bdSKiran Chandramohan  !$omp do linear(ref(b))
2063323a4bdSKiran Chandramohan  do i = 1, N
2073323a4bdSKiran Chandramohan     a = 3.14
2083323a4bdSKiran Chandramohan  enddo
2093323a4bdSKiran Chandramohan
2103323a4bdSKiran Chandramohan  !ERROR: The NONMONOTONIC modifier can only be specified with SCHEDULE(DYNAMIC) or SCHEDULE(GUIDED)
2113323a4bdSKiran Chandramohan  !ERROR: The NONMONOTONIC modifier cannot be specified if an ORDERED clause is specified
2123323a4bdSKiran Chandramohan  !$omp do schedule(NONMONOTONIC:static) ordered
2133323a4bdSKiran Chandramohan  do i = 1, N
2143323a4bdSKiran Chandramohan     a = 3.14
2153323a4bdSKiran Chandramohan  enddo
2163323a4bdSKiran Chandramohan
2173323a4bdSKiran Chandramohan  !$omp do schedule(simd, monotonic:dynamic)
2183323a4bdSKiran Chandramohan  do i = 1, N
2193323a4bdSKiran Chandramohan     a = 3.14
2203323a4bdSKiran Chandramohan  enddo
2213323a4bdSKiran Chandramohan
2223323a4bdSKiran Chandramohan  !ERROR: Clause LINEAR is not allowed if clause ORDERED appears on the DO directive
2233323a4bdSKiran Chandramohan  !ERROR: The parameter of the ORDERED clause must be a constant positive integer expression
224*03cbe426SKrzysztof Parzyszek  !ERROR: 'b' appears in more than one data-sharing clause on the same OpenMP directive
2253323a4bdSKiran Chandramohan  !$omp do ordered(1-1) private(b) linear(b) linear(a)
2263323a4bdSKiran Chandramohan  do i = 1, N
2273323a4bdSKiran Chandramohan     a = 3.14
2283323a4bdSKiran Chandramohan  enddo
2293323a4bdSKiran Chandramohan
230*03cbe426SKrzysztof Parzyszek  !ERROR: Clause LINEAR is not allowed if clause ORDERED appears on the DO directive
231*03cbe426SKrzysztof Parzyszek  !ERROR: The parameter of the ORDERED clause must be a constant positive integer expression
232*03cbe426SKrzysztof Parzyszek  !$omp do ordered(1-1) linear(a)
233*03cbe426SKrzysztof Parzyszek  do i = 1, N
234*03cbe426SKrzysztof Parzyszek     a = 3.14
235*03cbe426SKrzysztof Parzyszek  enddo
236*03cbe426SKrzysztof Parzyszek
2373323a4bdSKiran Chandramohan  !ERROR: The parameter of the ORDERED clause must be greater than or equal to the parameter of the COLLAPSE clause
2383323a4bdSKiran Chandramohan  !$omp do collapse(num-14) ordered(1)
2393323a4bdSKiran Chandramohan  do i = 1, N
2403323a4bdSKiran Chandramohan     do j = 1, N
2413323a4bdSKiran Chandramohan        do k = 1, N
2423323a4bdSKiran Chandramohan           a = 3.14
2433323a4bdSKiran Chandramohan        enddo
2443323a4bdSKiran Chandramohan     enddo
2453323a4bdSKiran Chandramohan  enddo
2463323a4bdSKiran Chandramohan
2473323a4bdSKiran Chandramohan  !$omp parallel do simd if(parallel:a>1.)
2483323a4bdSKiran Chandramohan  do i = 1, N
2493323a4bdSKiran Chandramohan  enddo
2503323a4bdSKiran Chandramohan  !$omp end parallel do simd
2513323a4bdSKiran Chandramohan
25233faa828SKrzysztof Parzyszek  !ERROR: TARGET is not a constituent of the PARALLEL DO directive
2533323a4bdSKiran Chandramohan  !$omp parallel do if(target:a>1.)
2543323a4bdSKiran Chandramohan  do i = 1, N
2553323a4bdSKiran Chandramohan  enddo
2563323a4bdSKiran Chandramohan  !ERROR: Unmatched END SIMD directive
2573323a4bdSKiran Chandramohan  !$omp end simd
2583323a4bdSKiran Chandramohan
2593323a4bdSKiran Chandramohan! 2.7.2 sections-clause -> private-clause |
2603323a4bdSKiran Chandramohan!                         firstprivate-clause |
2613323a4bdSKiran Chandramohan!                         lastprivate-clause |
2623323a4bdSKiran Chandramohan!                         reduction-clause
2633323a4bdSKiran Chandramohan
2643323a4bdSKiran Chandramohan  !$omp parallel
2653323a4bdSKiran Chandramohan  !$omp sections
2663323a4bdSKiran Chandramohan  !$omp section
2673323a4bdSKiran Chandramohan  a = 0.0
2683323a4bdSKiran Chandramohan  !$omp section
2693323a4bdSKiran Chandramohan  b = 1
2703323a4bdSKiran Chandramohan  !$omp end sections nowait
2713323a4bdSKiran Chandramohan  !$omp end parallel
2723323a4bdSKiran Chandramohan
2733323a4bdSKiran Chandramohan  !$omp parallel
2743323a4bdSKiran Chandramohan  !$omp sections
2753323a4bdSKiran Chandramohan  !$omp section
2763323a4bdSKiran Chandramohan  a = 0.0
2773323a4bdSKiran Chandramohan  !ERROR: Unmatched END PARALLEL SECTIONS directive
2783323a4bdSKiran Chandramohan  !$omp end parallel sections
2793323a4bdSKiran Chandramohan  !$omp end parallel
2803323a4bdSKiran Chandramohan
2813323a4bdSKiran Chandramohan  !$omp parallel
2823323a4bdSKiran Chandramohan  !$omp sections
2833323a4bdSKiran Chandramohan  a = 0.0
2843323a4bdSKiran Chandramohan  b = 1
2853323a4bdSKiran Chandramohan  !$omp section
2863323a4bdSKiran Chandramohan  c = 1
2873323a4bdSKiran Chandramohan  d = 2
2883323a4bdSKiran Chandramohan  !ERROR: NUM_THREADS clause is not allowed on the END SECTIONS directive
2893323a4bdSKiran Chandramohan  !$omp end sections num_threads(4)
2903323a4bdSKiran Chandramohan
2913323a4bdSKiran Chandramohan  !$omp parallel
2923323a4bdSKiran Chandramohan  !$omp sections
2933323a4bdSKiran Chandramohan    b = 1
2943323a4bdSKiran Chandramohan  !$omp section
2953323a4bdSKiran Chandramohan    c = 1
2963323a4bdSKiran Chandramohan    d = 2
2973323a4bdSKiran Chandramohan  !ERROR: At most one NOWAIT clause can appear on the END SECTIONS directive
2983323a4bdSKiran Chandramohan  !$omp end sections nowait nowait
2993323a4bdSKiran Chandramohan  !$omp end parallel
3003323a4bdSKiran Chandramohan
3013323a4bdSKiran Chandramohan  !$omp end parallel
3023323a4bdSKiran Chandramohan
3033323a4bdSKiran Chandramohan! 2.11.2 parallel-sections-clause -> parallel-clause |
3043323a4bdSKiran Chandramohan!                                    sections-clause
3053323a4bdSKiran Chandramohan
3063323a4bdSKiran Chandramohan  !$omp parallel sections num_threads(4) private(b) lastprivate(d)
3073323a4bdSKiran Chandramohan  a = 0.0
3083323a4bdSKiran Chandramohan  !$omp section
3093323a4bdSKiran Chandramohan  b = 1
3103323a4bdSKiran Chandramohan  c = 2
3113323a4bdSKiran Chandramohan  !$omp section
3123323a4bdSKiran Chandramohan  d = 3
3133323a4bdSKiran Chandramohan  !$omp end parallel sections
3143323a4bdSKiran Chandramohan
3153323a4bdSKiran Chandramohan  !ERROR: At most one NUM_THREADS clause can appear on the PARALLEL SECTIONS directive
3163323a4bdSKiran Chandramohan  !$omp parallel sections num_threads(1) num_threads(4)
3173323a4bdSKiran Chandramohan  a = 0.0
3183323a4bdSKiran Chandramohan  !ERROR: Unmatched END SECTIONS directive
3193323a4bdSKiran Chandramohan  !$omp end sections
3203323a4bdSKiran Chandramohan
3213323a4bdSKiran Chandramohan  !$omp parallel sections
3223323a4bdSKiran Chandramohan  !ERROR: NOWAIT clause is not allowed on the END PARALLEL SECTIONS directive
3233323a4bdSKiran Chandramohan  !$omp end parallel sections nowait
3243323a4bdSKiran Chandramohan
3253323a4bdSKiran Chandramohan! 2.7.3 single-clause -> private-clause |
3263323a4bdSKiran Chandramohan!                        firstprivate-clause
3273323a4bdSKiran Chandramohan!   end-single-clause -> copyprivate-clause |
3283323a4bdSKiran Chandramohan!                        nowait-clause
3293323a4bdSKiran Chandramohan
3303323a4bdSKiran Chandramohan  !$omp parallel
3313323a4bdSKiran Chandramohan  b = 1
3323323a4bdSKiran Chandramohan  !ERROR: LASTPRIVATE clause is not allowed on the SINGLE directive
333666a6197SKiran Kumar T P  !ERROR: NOWAIT clause is not allowed on the OMP SINGLE directive, use it on OMP END SINGLE directive
334666a6197SKiran Kumar T P  !$omp single private(a) lastprivate(c) nowait
3353323a4bdSKiran Chandramohan  a = 3.14
3363323a4bdSKiran Chandramohan  !ERROR: Clause NOWAIT is not allowed if clause COPYPRIVATE appears on the END SINGLE directive
3373323a4bdSKiran Chandramohan  !ERROR: COPYPRIVATE variable 'a' may not appear on a PRIVATE or FIRSTPRIVATE clause on a SINGLE construct
3383323a4bdSKiran Chandramohan  !ERROR: At most one NOWAIT clause can appear on the END SINGLE directive
3393323a4bdSKiran Chandramohan  !$omp end single copyprivate(a) nowait nowait
3403323a4bdSKiran Chandramohan  c = 2
3413323a4bdSKiran Chandramohan  !$omp end parallel
3423323a4bdSKiran Chandramohan
3433323a4bdSKiran Chandramohan! 2.7.4 workshare
3443323a4bdSKiran Chandramohan
3453323a4bdSKiran Chandramohan  !$omp parallel
3463323a4bdSKiran Chandramohan  !$omp workshare
3473323a4bdSKiran Chandramohan  a = 1.0
3483323a4bdSKiran Chandramohan  !$omp end workshare nowait
3493323a4bdSKiran Chandramohan  !ERROR: NUM_THREADS clause is not allowed on the WORKSHARE directive
3503323a4bdSKiran Chandramohan  !$omp workshare num_threads(4)
3513323a4bdSKiran Chandramohan  a = 1.0
3523323a4bdSKiran Chandramohan  !ERROR: COPYPRIVATE clause is not allowed on the END WORKSHARE directive
3533323a4bdSKiran Chandramohan  !$omp end workshare nowait copyprivate(a)
3541334c034SKrzysztof Parzyszek  !ERROR: NOWAIT clause is not allowed on the OMP WORKSHARE directive, use it on OMP END WORKSHARE directive
3554078afc6SKrzysztof Parzyszek  !$omp workshare nowait
3564078afc6SKrzysztof Parzyszek  !$omp end workshare
3573323a4bdSKiran Chandramohan  !$omp end parallel
3583323a4bdSKiran Chandramohan
3593323a4bdSKiran Chandramohan! 2.8.1 simd-clause -> safelen-clause |
3603323a4bdSKiran Chandramohan!                      simdlen-clause |
3613323a4bdSKiran Chandramohan!                      linear-clause |
3623323a4bdSKiran Chandramohan!                      aligned-clause |
3633323a4bdSKiran Chandramohan!                      private-clause |
3643323a4bdSKiran Chandramohan!                      lastprivate-clause |
3653323a4bdSKiran Chandramohan!                      reduction-clause |
3663323a4bdSKiran Chandramohan!                      collapse-clause
3673323a4bdSKiran Chandramohan
3683323a4bdSKiran Chandramohan  a = 0.0
3693323a4bdSKiran Chandramohan  !ERROR: TASK_REDUCTION clause is not allowed on the SIMD directive
3703323a4bdSKiran Chandramohan  !$omp simd private(b) reduction(+:a) task_reduction(+:a)
3713323a4bdSKiran Chandramohan  do i = 1, N
3723323a4bdSKiran Chandramohan     a = a + b + 3.14
3733323a4bdSKiran Chandramohan  enddo
3743323a4bdSKiran Chandramohan
3753323a4bdSKiran Chandramohan  !ERROR: At most one SAFELEN clause can appear on the SIMD directive
3763323a4bdSKiran Chandramohan  !$omp simd safelen(1) safelen(2)
3773323a4bdSKiran Chandramohan  do i = 1, N
3783323a4bdSKiran Chandramohan     a = 3.14
3793323a4bdSKiran Chandramohan  enddo
3803323a4bdSKiran Chandramohan
3813323a4bdSKiran Chandramohan  !ERROR: The parameter of the SIMDLEN clause must be a constant positive integer expression
3823323a4bdSKiran Chandramohan  !$omp simd simdlen(-1)
3833323a4bdSKiran Chandramohan  do i = 1, N
3843323a4bdSKiran Chandramohan     a = 3.14
3853323a4bdSKiran Chandramohan  enddo
3863323a4bdSKiran Chandramohan
38705096590SKrzysztof Parzyszek  !ERROR: The alignment value should be a constant positive integer
388f36a2547SRaghu Maddhipatla  !$omp simd aligned(cpt:-2)
3893323a4bdSKiran Chandramohan  do i = 1, N
3903323a4bdSKiran Chandramohan     a = 3.14
3913323a4bdSKiran Chandramohan  enddo
3923323a4bdSKiran Chandramohan
3933323a4bdSKiran Chandramohan  !$omp parallel
3943323a4bdSKiran Chandramohan  !ERROR: The parameter of the SIMDLEN clause must be less than or equal to the parameter of the SAFELEN clause
3953323a4bdSKiran Chandramohan  !$omp simd safelen(1+1) simdlen(1+2)
3963323a4bdSKiran Chandramohan  do i = 1, N
3973323a4bdSKiran Chandramohan     a = 3.14
3983323a4bdSKiran Chandramohan  enddo
3993323a4bdSKiran Chandramohan  !$omp end parallel
4003323a4bdSKiran Chandramohan
401e6321d94SThirumalai Shaktivel  !ERROR: The `SAFELEN` clause cannot appear in the `SIMD` directive with `ORDER(CONCURRENT)` clause
402e6321d94SThirumalai Shaktivel  !$omp simd order(concurrent) safelen(1+2)
403e6321d94SThirumalai Shaktivel  do i = 1, N
404e6321d94SThirumalai Shaktivel    a = 3.14
405e6321d94SThirumalai Shaktivel  enddo
406e6321d94SThirumalai Shaktivel
4073323a4bdSKiran Chandramohan! 2.11.1 parallel-do-clause -> parallel-clause |
4083323a4bdSKiran Chandramohan!                              do-clause
4093323a4bdSKiran Chandramohan
4103323a4bdSKiran Chandramohan  !ERROR: At most one PROC_BIND clause can appear on the PARALLEL DO directive
4113323a4bdSKiran Chandramohan  !ERROR: A modifier may not be specified in a LINEAR clause on the PARALLEL DO directive
4123323a4bdSKiran Chandramohan  !$omp parallel do proc_bind(master) proc_bind(close) linear(val(b))
4133323a4bdSKiran Chandramohan  do i = 1, N
4143323a4bdSKiran Chandramohan     a = 3.14
4153323a4bdSKiran Chandramohan  enddo
4163323a4bdSKiran Chandramohan
4173323a4bdSKiran Chandramohan! 2.8.3 do-simd-clause -> do-clause |
4183323a4bdSKiran Chandramohan!                         simd-clause
4193323a4bdSKiran Chandramohan
4203323a4bdSKiran Chandramohan  !$omp parallel
4213323a4bdSKiran Chandramohan  !ERROR: No ORDERED clause with a parameter can be specified on the DO SIMD directive
4223323a4bdSKiran Chandramohan  !ERROR: NOGROUP clause is not allowed on the DO SIMD directive
423666a6197SKiran Kumar T P  !ERROR: NOWAIT clause is not allowed on the OMP DO SIMD directive, use it on OMP END DO SIMD directive
424666a6197SKiran Kumar T P  !$omp do simd ordered(2) NOGROUP nowait
4253323a4bdSKiran Chandramohan  do i = 1, N
4263323a4bdSKiran Chandramohan     do j = 1, N
4273323a4bdSKiran Chandramohan        a = 3.14
4283323a4bdSKiran Chandramohan     enddo
4293323a4bdSKiran Chandramohan  enddo
430666a6197SKiran Kumar T P  !omp end do nowait
4313323a4bdSKiran Chandramohan  !$omp end parallel
4323323a4bdSKiran Chandramohan
4333323a4bdSKiran Chandramohan! 2.11.4 parallel-do-simd-clause -> parallel-clause |
4343323a4bdSKiran Chandramohan!                                   do-simd-clause
4353323a4bdSKiran Chandramohan
4363323a4bdSKiran Chandramohan  !$omp parallel do simd collapse(2) safelen(2) &
4373323a4bdSKiran Chandramohan  !$omp & simdlen(1) private(c) firstprivate(a) proc_bind(spread)
4383323a4bdSKiran Chandramohan  do i = 1, N
4393323a4bdSKiran Chandramohan     do j = 1, N
4403323a4bdSKiran Chandramohan        a = 3.14
4413323a4bdSKiran Chandramohan     enddo
4423323a4bdSKiran Chandramohan  enddo
4433323a4bdSKiran Chandramohan
4443323a4bdSKiran Chandramohan! 2.9.2 taskloop -> TASKLOOP [taskloop-clause[ [,] taskloop-clause]...]
4453323a4bdSKiran Chandramohan!       taskloop-clause -> if-clause |
4463323a4bdSKiran Chandramohan!                          shared-clause |
4473323a4bdSKiran Chandramohan!                          private-clause |
4483323a4bdSKiran Chandramohan!                          firstprivate-clause |
4493323a4bdSKiran Chandramohan!                          lastprivate-clause |
4503323a4bdSKiran Chandramohan!                          default-clause |
4513323a4bdSKiran Chandramohan!                          grainsize-clause |
4523323a4bdSKiran Chandramohan!                          num-tasks-clause |
4533323a4bdSKiran Chandramohan!                          collapse-clause |
4543323a4bdSKiran Chandramohan!                          final-clause |
4553323a4bdSKiran Chandramohan!                          priority-clause |
4563323a4bdSKiran Chandramohan!                          untied-clause |
4573323a4bdSKiran Chandramohan!                          mergeable-clause |
4583323a4bdSKiran Chandramohan!                          nogroup-clause
4593323a4bdSKiran Chandramohan
4603323a4bdSKiran Chandramohan  !$omp taskloop
4613323a4bdSKiran Chandramohan  do i = 1, N
4623323a4bdSKiran Chandramohan     a = 3.14
4633323a4bdSKiran Chandramohan  enddo
4643323a4bdSKiran Chandramohan
4653323a4bdSKiran Chandramohan  !ERROR: SCHEDULE clause is not allowed on the TASKLOOP directive
4663323a4bdSKiran Chandramohan  !$omp taskloop schedule(static)
4673323a4bdSKiran Chandramohan  do i = 1, N
4683323a4bdSKiran Chandramohan     a = 3.14
4693323a4bdSKiran Chandramohan  enddo
4703323a4bdSKiran Chandramohan
4713323a4bdSKiran Chandramohan  !ERROR: GRAINSIZE and NUM_TASKS clauses are mutually exclusive and may not appear on the same TASKLOOP directive
4723323a4bdSKiran Chandramohan  !$omp taskloop num_tasks(3) grainsize(2)
4733323a4bdSKiran Chandramohan  do i = 1,N
4743323a4bdSKiran Chandramohan     a = 3.14
4753323a4bdSKiran Chandramohan  enddo
4763323a4bdSKiran Chandramohan
4773323a4bdSKiran Chandramohan  !ERROR: At most one NUM_TASKS clause can appear on the TASKLOOP directive
4783323a4bdSKiran Chandramohan  !ERROR: TASK_REDUCTION clause is not allowed on the TASKLOOP directive
4793323a4bdSKiran Chandramohan  !$omp taskloop num_tasks(3) num_tasks(2) task_reduction(*:a)
4803323a4bdSKiran Chandramohan  do i = 1,N
4813323a4bdSKiran Chandramohan    a = 3.14
4823323a4bdSKiran Chandramohan  enddo
4833323a4bdSKiran Chandramohan
4843323a4bdSKiran Chandramohan! 2.13.1 master
4853323a4bdSKiran Chandramohan
4863323a4bdSKiran Chandramohan  !$omp parallel
487092a819eSKiran Chandramohan  !WARNING: OpenMP directive MASTER has been deprecated, please use MASKED instead.
4883323a4bdSKiran Chandramohan  !$omp master
4893323a4bdSKiran Chandramohan  a=3.14
4903323a4bdSKiran Chandramohan  !$omp end master
4913323a4bdSKiran Chandramohan  !$omp end parallel
4923323a4bdSKiran Chandramohan
4933323a4bdSKiran Chandramohan  !$omp parallel
494092a819eSKiran Chandramohan  !WARNING: OpenMP directive MASTER has been deprecated, please use MASKED instead.
4953323a4bdSKiran Chandramohan  !ERROR: NUM_THREADS clause is not allowed on the MASTER directive
4963323a4bdSKiran Chandramohan  !$omp master num_threads(4)
4973323a4bdSKiran Chandramohan  a=3.14
4983323a4bdSKiran Chandramohan  !$omp end master
4993323a4bdSKiran Chandramohan  !$omp end parallel
5003323a4bdSKiran Chandramohan
5013323a4bdSKiran Chandramohan! Standalone Directives (basic)
5023323a4bdSKiran Chandramohan
5033323a4bdSKiran Chandramohan  !$omp taskyield
5043323a4bdSKiran Chandramohan  !$omp barrier
5053323a4bdSKiran Chandramohan  !$omp taskwait
506f87737f3SKrzysztof Parzyszek  !ERROR: The SINK and SOURCE dependence types can only be used with the ORDERED directive, used here in the TASKWAIT construct
5073323a4bdSKiran Chandramohan  !$omp taskwait depend(source)
5083323a4bdSKiran Chandramohan  ! !$omp taskwait depend(sink:i-1)
5093323a4bdSKiran Chandramohan  ! !$omp target enter data map(to:arrayA) map(alloc:arrayB)
5103323a4bdSKiran Chandramohan  ! !$omp target update from(arrayA) to(arrayB)
5113323a4bdSKiran Chandramohan  ! !$omp target exit data map(from:arrayA) map(delete:arrayB)
5123323a4bdSKiran Chandramohan  !$omp flush (c)
5133323a4bdSKiran Chandramohan  !$omp flush acq_rel
5143323a4bdSKiran Chandramohan  !$omp flush release
5153323a4bdSKiran Chandramohan  !$omp flush acquire
5163323a4bdSKiran Chandramohan  !ERROR: If memory-order-clause is RELEASE, ACQUIRE, or ACQ_REL, list items must not be specified on the FLUSH directive
5173323a4bdSKiran Chandramohan  !$omp flush release (c)
5183323a4bdSKiran Chandramohan  !$omp flush seq_cst
5193323a4bdSKiran Chandramohan  !ERROR: RELAXED clause is not allowed on the FLUSH directive
5203323a4bdSKiran Chandramohan  !$omp flush relaxed
5213323a4bdSKiran Chandramohan
5223323a4bdSKiran Chandramohan! 2.13.2 critical Construct
5233323a4bdSKiran Chandramohan
5243323a4bdSKiran Chandramohan  ! !$omp critical (first)
5253323a4bdSKiran Chandramohan  a = 3.14
5263323a4bdSKiran Chandramohan  ! !$omp end critical (first)
5273323a4bdSKiran Chandramohan
5283323a4bdSKiran Chandramohan! 2.9.1 task-clause -> if-clause |
5293323a4bdSKiran Chandramohan!                      final-clause |
5303323a4bdSKiran Chandramohan!                      untied-clause |
5313323a4bdSKiran Chandramohan!                      default-clause |
5323323a4bdSKiran Chandramohan!                      mergeable-clause |
5333323a4bdSKiran Chandramohan!                      private-clause |
5343323a4bdSKiran Chandramohan!                      firstprivate-clause |
5353323a4bdSKiran Chandramohan!                      shared-clause |
5363323a4bdSKiran Chandramohan!                      depend-clause |
5373323a4bdSKiran Chandramohan!                      priority-clause
5383323a4bdSKiran Chandramohan
5393323a4bdSKiran Chandramohan  !$omp task shared(a) default(none) if(task:a > 1.)
5403323a4bdSKiran Chandramohan  a = 1.
5413323a4bdSKiran Chandramohan  !$omp end task
5423323a4bdSKiran Chandramohan
54333faa828SKrzysztof Parzyszek  !ERROR: TASKLOOP is not a constituent of the TASK directive
5443323a4bdSKiran Chandramohan  !$omp task private(a) if(taskloop:a.eq.1)
5453323a4bdSKiran Chandramohan  a = 1.
5463323a4bdSKiran Chandramohan  !$omp end task
5473323a4bdSKiran Chandramohan
5483323a4bdSKiran Chandramohan  !ERROR: LASTPRIVATE clause is not allowed on the TASK directive
5493323a4bdSKiran Chandramohan  !ERROR: At most one FINAL clause can appear on the TASK directive
5503323a4bdSKiran Chandramohan  !$omp task lastprivate(b) final(a.GE.1) final(.false.)
5513323a4bdSKiran Chandramohan  b = 1
5523323a4bdSKiran Chandramohan  !$omp end task
5533323a4bdSKiran Chandramohan
5543323a4bdSKiran Chandramohan  !ERROR: The parameter of the PRIORITY clause must be a positive integer expression
5553323a4bdSKiran Chandramohan  !$omp task priority(-1) firstprivate(a) mergeable
5563323a4bdSKiran Chandramohan  a = 3.14
5573323a4bdSKiran Chandramohan  !$omp end task
5583323a4bdSKiran Chandramohan
5593323a4bdSKiran Chandramohan! 2.9.3 taskloop-simd-clause -> taskloop-clause |
5603323a4bdSKiran Chandramohan!                               simd-clause
5613323a4bdSKiran Chandramohan
5623323a4bdSKiran Chandramohan  !$omp taskloop simd
5633323a4bdSKiran Chandramohan  do i = 1, N
5643323a4bdSKiran Chandramohan     a = 3.14
5653323a4bdSKiran Chandramohan  enddo
5663323a4bdSKiran Chandramohan  !$omp end taskloop simd
5673323a4bdSKiran Chandramohan
5683323a4bdSKiran Chandramohan  !$omp taskloop simd reduction(+:a)
5693323a4bdSKiran Chandramohan  do i = 1, N
5703323a4bdSKiran Chandramohan     a = a + 3.14
5713323a4bdSKiran Chandramohan  enddo
5723323a4bdSKiran Chandramohan  !ERROR: Unmatched END TASKLOOP directive
5733323a4bdSKiran Chandramohan  !$omp end taskloop
5743323a4bdSKiran Chandramohan
5753323a4bdSKiran Chandramohan  !ERROR: GRAINSIZE and NUM_TASKS clauses are mutually exclusive and may not appear on the same TASKLOOP SIMD directive
5763323a4bdSKiran Chandramohan  !$omp taskloop simd num_tasks(3) grainsize(2)
5773323a4bdSKiran Chandramohan  do i = 1,N
5783323a4bdSKiran Chandramohan     a = 3.14
5793323a4bdSKiran Chandramohan  enddo
5803323a4bdSKiran Chandramohan
581f36a2547SRaghu Maddhipatla  allocate(allc)
5823323a4bdSKiran Chandramohan  !ERROR: The parameter of the SIMDLEN clause must be a constant positive integer expression
58305096590SKrzysztof Parzyszek  !ERROR: The alignment value should be a constant positive integer
584f36a2547SRaghu Maddhipatla  !$omp taskloop simd simdlen(-1) aligned(allc:-2)
5853323a4bdSKiran Chandramohan  do i = 1, N
586f36a2547SRaghu Maddhipatla     allc = 3.14
5873323a4bdSKiran Chandramohan  enddo
5883323a4bdSKiran Chandramohan
5893323a4bdSKiran Chandramohan  !$omp target enter data map(alloc:A) device(0)
5903323a4bdSKiran Chandramohan  !$omp target exit data map(delete:A) device(0)
5913323a4bdSKiran Chandramohan
5923323a4bdSKiran Chandramohanend program
593