diff --git a/flang/lib/Lower/OpenMP.cpp b/flang/lib/Lower/OpenMP.cpp --- a/flang/lib/Lower/OpenMP.cpp +++ b/flang/lib/Lower/OpenMP.cpp @@ -238,6 +238,8 @@ auto masterOp = firOpBuilder.create(currentLocation, argTy); createBodyOfOp(masterOp, firOpBuilder, currentLocation); + } else if (blockDirective.v == llvm::omp::OMPD_taskgroup) { + TODO(""); } } 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 @@ -760,6 +760,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: @@ -785,6 +786,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 @@ -1236,6 +1236,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,55 @@ +! RUN: %S/test_errors.sh %s %t %f18 -fopenmp +use omp_lib + implicit none + integer :: xyz, abc + !$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 taskgroup task_reduction(+, reduction_var) +! print *, "The " +! !$omp taskgroup task_reduction(min, reduction_var) +! !$omp taskgroup task_reduction(min, reduction_var) +! !$omp taskgroup task_reduction(.or., reduction_var) +! !$omp taskgroup task_reduction(iand, reduction_var) +! print *, "almighty sun" +! !$omp end taskgroup +! !$omp end taskgroup +! !$omp end taskgroup +! !$omp end taskgroup +! !$omp end task +! !$omp taskgroup task_reduction(-, xyz) task_reduction(-, xyz) +! !$omp end taskgroup +! !$omp end taskgroup +! !$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,5 +1,4 @@ ! RUN: %S/test_errors.sh %s %t %f18 -fopenmp -! XFAIL: * ! OpenMP Version 4.5 ! 2.9.2 taskloop Construct