aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libgomp/ChangeLog10
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-3.c13
2 files changed, 19 insertions, 4 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 171b5c7..7ce0cdb 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,13 @@
+2018-12-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR libgomp/87995
+ * testsuite/libgomp.c-c++-common/cancel-taskgroup-3.c: Require
+ tls_runtime effective target.
+ (t): New threadprivate variable.
+ (main): Set t in threads which execute iterations of the worksharing
+ loop. Propagate that to the task after the loop and don't abort
+ if the current taskgroup hasn't been cancelled.
+
2018-12-02 Jakub Jelinek <jakub@redhat.com>
* testsuite/libgomp.c/task-reduction-3.c: New test.
diff --git a/libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-3.c b/libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-3.c
index b9af835..9e07cc1 100644
--- a/libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-3.c
+++ b/libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-3.c
@@ -1,9 +1,12 @@
-/* { dg-do run } */
+/* { dg-do run { target tls_runtime } } */
/* { dg-set-target-env-var OMP_CANCELLATION "true" } */
#include <stdlib.h>
#include <omp.h>
+int t;
+#pragma omp threadprivate (t)
+
int
main ()
{
@@ -42,11 +45,12 @@ main ()
#pragma omp parallel
#pragma omp taskgroup
{
- #pragma omp taskwait
+ int p;
#pragma omp for reduction (task, +: a)
for (i = 0; i < 64; ++i)
{
a++;
+ t = 1;
#pragma omp task in_reduction (+: a)
{
volatile int zero = 0;
@@ -58,9 +62,10 @@ main ()
}
if (a != 64)
abort ();
- #pragma omp task
+ p = t;
+ #pragma omp task firstprivate (p)
{
- if (omp_get_cancellation ())
+ if (p && omp_get_cancellation ())
abort ();
}
}