diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp --- a/flang/lib/Semantics/resolve-directives.cpp +++ b/flang/lib/Semantics/resolve-directives.cpp @@ -899,6 +899,7 @@ case llvm::omp::Directive::OMPD_target: case llvm::omp::Directive::OMPD_target_data: case llvm::omp::Directive::OMPD_task: + case llvm::omp::Directive::OMPD_taskgroup: case llvm::omp::Directive::OMPD_teams: case llvm::omp::Directive::OMPD_workshare: case llvm::omp::Directive::OMPD_parallel_workshare: @@ -924,6 +925,7 @@ case llvm::omp::Directive::OMPD_single: case llvm::omp::Directive::OMPD_target: case llvm::omp::Directive::OMPD_task: + case llvm::omp::Directive::OMPD_taskgroup: case llvm::omp::Directive::OMPD_teams: case llvm::omp::Directive::OMPD_parallel_workshare: case llvm::omp::Directive::OMPD_target_teams: diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp --- a/flang/lib/Semantics/resolve-names.cpp +++ b/flang/lib/Semantics/resolve-names.cpp @@ -1240,6 +1240,7 @@ case llvm::omp::Directive::OMPD_target_data: case llvm::omp::Directive::OMPD_master: case llvm::omp::Directive::OMPD_ordered: + case llvm::omp::Directive::OMPD_taskgroup: return false; default: return true; diff --git a/flang/test/Semantics/omp-taskgroup01.f90 b/flang/test/Semantics/omp-taskgroup01.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/omp-taskgroup01.f90 @@ -0,0 +1,48 @@ +! RUN: %S/test_errors.sh %s %t %f18 -fopenmp +use omp_lib + implicit none + integer :: xyz, abc + real :: reduction_var + !$omp parallel num_threads(4) + !$omp single + print *, "The" + !$omp taskgroup + !$omp task + print *, "almighty" + !$omp end task + !$omp task + print *, "sun" + !$omp end task + !$omp end taskgroup + !$omp end single + !$omp end parallel + + !$omp parallel private(xyz) + !$omp taskgroup allocate(xyz) + !$omp task + print *, "The " + !$omp taskgroup allocate(omp_large_cap_mem_space: abc) + !$omp task + print *, "almighty sun" + !$omp end task + !$omp end taskgroup + !$omp end task + !$omp end taskgroup + !$omp end parallel + + !ERROR: PRIVATE clause is not allowed on the TASKGROUP directive + !$omp taskgroup private(abc) + !$omp end taskgroup + + !$omp parallel + !$omp task + !$omp taskgroup task_reduction(+ : reduction_var) + print *, "The " + !$omp taskgroup task_reduction(.or. : reduction_var) task_reduction(.and. : reduction_var) + print *, "almighty sun" + !$omp end taskgroup + !$omp end taskgroup + !$omp end task + !$omp end parallel + + end program diff --git a/flang/test/Semantics/omp-taskloop01.f90 b/flang/test/Semantics/omp-taskloop01.f90 --- a/flang/test/Semantics/omp-taskloop01.f90 +++ b/flang/test/Semantics/omp-taskloop01.f90 @@ -1,9 +1,7 @@ ! RUN: %S/test_errors.sh %s %t %f18 -fopenmp -! XFAIL: * ! OpenMP Version 4.5 ! 2.9.2 taskloop Construct -! Assert fail for correct test case. subroutine parallel_work integer i 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 @@ -440,8 +440,8 @@ } def OMP_TaskGroup : Directive<"taskgroup"> { let allowedClauses = [ - VersionedClause, - VersionedClause + VersionedClause, + VersionedClause ]; } def OMP_Flush : Directive<"flush"> {