
This is pretty straightforward, if gomp_thread ()->task is NULL, it can't be explicit task, otherwise if gomp_thread ()->task->kind == GOMP_TASK_IMPLICIT, it is an implicit task, otherwise explicit task. 2022-10-12 Jakub Jelinek <jakub@redhat.com> * omp.h.in (omp_in_explicit_task): Declare. * omp_lib.h.in (omp_in_explicit_task): Likewise. * omp_lib.f90.in (omp_in_explicit_task): New interface. * libgomp.map (OMP_5.2): New symbol version, export omp_in_explicit_task and omp_in_explicit_task_. * task.c (omp_in_explicit_task): New function. * fortran.c (omp_in_explicit_task): Add ialias_redirect. (omp_in_explicit_task_): New function. * libgomp.texi (OpenMP 5.2): Mark omp_in_explicit_task as implemented. * testsuite/libgomp.c-c++-common/task-in-explicit-1.c: New test. * testsuite/libgomp.c-c++-common/task-in-explicit-2.c: New test. * testsuite/libgomp.c-c++-common/task-in-explicit-3.c: New test.
36 lines
536 B
C
36 lines
536 B
C
/* { dg-do run } */
|
|
|
|
#include <omp.h>
|
|
#include <stdlib.h>
|
|
|
|
int a;
|
|
|
|
int
|
|
main ()
|
|
{
|
|
#pragma omp task
|
|
{
|
|
if (!omp_in_explicit_task ())
|
|
abort ();
|
|
#pragma omp task
|
|
{
|
|
if (!omp_in_explicit_task ())
|
|
abort ();
|
|
#pragma omp taskgroup task_reduction (+: a)
|
|
{
|
|
if (!omp_in_explicit_task ())
|
|
abort ();
|
|
#pragma omp task in_reduction (+: a)
|
|
{
|
|
++a;
|
|
if (!omp_in_explicit_task ())
|
|
abort ();
|
|
}
|
|
}
|
|
if (!omp_in_explicit_task ())
|
|
abort ();
|
|
#pragma omp taskwait
|
|
}
|
|
}
|
|
return 0;
|
|
}
|