aboutsummaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-1.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2022-10-12 18:39:20 +0200
committerJakub Jelinek <jakub@redhat.com>2022-10-12 18:39:20 +0200
commit0ec4e93fb9fa5e9d2424683c5fab1310c8ae2f76 (patch)
treefc09141e665147810f3e29e784bf0d1cb5f61fdc /libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-1.c
parenta58a965eb73253759f6a3e1c7380392557da89c8 (diff)
downloadgcc-0ec4e93fb9fa5e9d2424683c5fab1310c8ae2f76.zip
gcc-0ec4e93fb9fa5e9d2424683c5fab1310c8ae2f76.tar.gz
gcc-0ec4e93fb9fa5e9d2424683c5fab1310c8ae2f76.tar.bz2
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.
Diffstat (limited to 'libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-1.c')
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-1.c106
1 files changed, 106 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-1.c b/libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-1.c
new file mode 100644
index 0000000..a228d93
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-1.c
@@ -0,0 +1,106 @@
+/* { 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;
+}