[Flang][Openmp] Upgrade TASKGROUP construct to 5.0.
In OMP 5.0 specification clause-list with
* task_reduction
* allocate
were allowed on taskgroup construct.
Fix XFAIL - omp-taskloop01.f90.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D93373
GitOrigin-RevId: 77ebfba68b9aa89e9ccbcdf8e285afa0661c8ca4
diff --git a/lib/Semantics/resolve-directives.cpp b/lib/Semantics/resolve-directives.cpp
index 67e2bd4..e1fc1ec 100644
--- a/lib/Semantics/resolve-directives.cpp
+++ b/lib/Semantics/resolve-directives.cpp
@@ -1069,12 +1069,12 @@
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:
case llvm::omp::Directive::OMPD_target_teams:
case llvm::omp::Directive::OMPD_target_parallel:
- case llvm::omp::Directive::OMPD_taskgroup:
PushContext(beginDir.source, beginDir.v);
break;
default:
diff --git a/lib/Semantics/resolve-names.cpp b/lib/Semantics/resolve-names.cpp
index 5582bd7..bdc4082 100644
--- a/lib/Semantics/resolve-names.cpp
+++ b/lib/Semantics/resolve-names.cpp
@@ -1292,6 +1292,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/test/Semantics/omp-taskgroup01.f90 b/test/Semantics/omp-taskgroup01.f90
new file mode 100644
index 0000000..c8de9f2
--- /dev/null
+++ b/test/Semantics/omp-taskgroup01.f90
@@ -0,0 +1,49 @@
+! RUN: %S/test_errors.sh %s %t %flang -fopenmp
+! REQUIRES: shell
+
+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
\ No newline at end of file