gcc/libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-1.c
Jakub Jelinek 0ec4e93fb9 libgomp: Add omp_in_explicit_task support
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.
2022-10-12 18:39:20 +02:00

106 lines
2 KiB
C

/* { dg-do run } */
#include <omp.h>
#include <stdlib.h>
int
main ()
{
if (omp_in_explicit_task ())
abort ();
#pragma omp task
if (!omp_in_explicit_task ())
abort ();
#pragma omp task final (1)
{
if (!omp_in_explicit_task ())
abort ();
#pragma omp task
if (!omp_in_explicit_task ())
abort ();
}
#pragma omp parallel
{
if (omp_in_explicit_task ())
abort ();
#pragma omp task if (0)
{
if (!omp_in_explicit_task ())
abort ();
#pragma omp task if (0)
if (!omp_in_explicit_task ())
abort ();
}
#pragma omp task final (1)
if (!omp_in_explicit_task ())
abort ();
#pragma omp barrier
if (omp_in_explicit_task ())
abort ();
#pragma omp taskloop num_tasks (24)
for (int i = 0; i < 32; ++i)
if (!omp_in_explicit_task ())
abort ();
#pragma omp masked
#pragma omp task
if (!omp_in_explicit_task ())
abort ();
#pragma omp barrier
if (omp_in_explicit_task ())
abort ();
}
#pragma omp target
{
if (omp_in_explicit_task ())
abort ();
#pragma omp task if (0)
if (!omp_in_explicit_task ())
abort ();
#pragma omp task
if (!omp_in_explicit_task ())
abort ();
}
#pragma omp target teams
{
#pragma omp distribute
for (int i = 0; i < 4; ++i)
if (omp_in_explicit_task ())
abort ();
else
{
#pragma omp parallel
{
if (omp_in_explicit_task ())
abort ();
#pragma omp task
if (!omp_in_explicit_task ())
abort ();
#pragma omp barrier
if (omp_in_explicit_task ())
abort ();
}
}
}
#pragma omp teams
{
#pragma omp distribute
for (int i = 0; i < 4; ++i)
if (omp_in_explicit_task ())
abort ();
else
{
#pragma omp parallel
{
if (omp_in_explicit_task ())
abort ();
#pragma omp task
if (!omp_in_explicit_task ())
abort ();
#pragma omp barrier
if (omp_in_explicit_task ())
abort ();
}
}
}
return 0;
}