diff --git a/flang/test/Semantics/omp-default.f90 b/flang/test/Semantics/omp-default.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/omp-default.f90 @@ -0,0 +1,34 @@ +!RUN: %S/test_errors.sh %s %t %f18 -fopenmp +! OpenMP Version 4.5 +! 2.15.3.1 default Clause +program omp_default + integer :: a(10), b(10), c(10),i,k + !ERROR: At most one DEFAULT clause can appear on the PARALLEL directive + !$omp parallel default(shared), default(private) + do i = 1, 10 + c(i) = a(i) + b(i) + k + end do + !$omp end parallel + + !ERROR: At most one DEFAULT clause can appear on the TASK directive + !$omp task default(shared), default(none), shared(a,b,c,k,i) + do i = 1, 10 + c(i) = a(i) + b(i) + k + end do + !$omp end task + + !ERROR: At most one DEFAULT clause can appear on the TASKLOOP directive + !$omp taskloop default(shared), default(private) + do i = 1, 10 + c(i) = a(i) + b(i) + k + end do + !$omp end taskloop + + !ERROR: At most one DEFAULT clause can appear on the TEAMS directive + !$omp teams default(shared), default(none), shared(i,a,b,k,c) + do i = 1, 10 + c(i) = a(i) + b(i) + k + end do + !$omp end teams + +end program omp_default diff --git a/flang/test/Semantics/omp-default02.f90 b/flang/test/Semantics/omp-default02.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/omp-default02.f90 @@ -0,0 +1,57 @@ +!RUN: %S/test_errors.sh %s %t %f18 -fopenmp +! OpenMP Version 4.5 +! 2.15.3.1 default Clause - a positive test case. + +!DEF: /omp_default MainProgram +program omp_default + !DEF: /omp_default/a ObjectEntity INTEGER(4) + !DEF: /omp_default/b ObjectEntity INTEGER(4) + !DEF: /omp_default/c ObjectEntity INTEGER(4) + !DEF: /omp_default/i ObjectEntity INTEGER(4) + !DEF: /omp_default/k ObjectEntity INTEGER(4) + integer a(10), b(10), c(10), i, k +!$omp parallel default(shared) + !DEF: /omp_default/Block1/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4) + do i=1,10 + !REF: /omp_default/c + !REF: /omp_default/Block1/i + !REF: /omp_default/a + !REF: /omp_default/b + !REF: /omp_default/k + c(i) = a(i)+b(i)+k + end do +!$omp end parallel +!$omp task default(shared) + !DEF: /omp_default/Block2/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4) + do i=1,10 + !REF: /omp_default/c + !REF: /omp_default/Block2/i + !REF: /omp_default/a + !REF: /omp_default/b + !REF: /omp_default/k + c(i) = a(i)+b(i)+k + end do +!$omp end task +!$omp taskloop default(shared) + !DEF: /omp_default/Block3/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4) + do i=1,10 + !REF: /omp_default/c + !REF: /omp_default/Block3/i + !REF: /omp_default/a + !REF: /omp_default/b + !REF: /omp_default/k + c(i) = a(i)+b(i)+k + end do +!$omp end taskloop +!$omp teams default(shared) + !REF: /omp_default/i + do i=1,10 + !REF: /omp_default/c + !REF: /omp_default/i + !REF: /omp_default/a + !REF: /omp_default/b + !REF: /omp_default/k + c(i) = a(i)+b(i)+k + end do +!$omp end teams +end program omp_default diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td --- a/llvm/include/llvm/Frontend/OpenMP/OMP.td +++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td @@ -297,7 +297,6 @@ def OMP_ThreadPrivate : Directive<"threadprivate"> {} def OMP_Parallel : Directive<"parallel"> { let allowedClauses = [ - VersionedClause, VersionedClause, VersionedClause, VersionedClause, @@ -306,6 +305,7 @@ VersionedClause ]; let allowedOnceClauses = [ + VersionedClause, VersionedClause, VersionedClause, VersionedClause, @@ -313,7 +313,6 @@ } def OMP_Task : Directive<"task"> { let allowedClauses = [ - VersionedClause, VersionedClause, VersionedClause, VersionedClause, @@ -326,6 +325,7 @@ VersionedClause ]; let allowedOnceClauses = [ + VersionedClause, VersionedClause, VersionedClause, VersionedClause @@ -807,7 +807,6 @@ VersionedClause, VersionedClause, VersionedClause, - VersionedClause, VersionedClause, VersionedClause, VersionedClause, @@ -816,6 +815,7 @@ VersionedClause ]; let allowedOnceClauses = [ + VersionedClause, VersionedClause, VersionedClause, VersionedClause,