aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2020-02-06 09:15:13 +0100
committerJakub Jelinek <jakub@redhat.com>2020-02-06 09:15:13 +0100
commitcf785618ecc90e3f063b99572de48cb91aa5ab5d (patch)
tree805eae2a3669c0e04bb46bf82b11d17a71503ba2
parent006eeaa819d2a58395ef448807025730939d165d (diff)
downloadgcc-cf785618ecc90e3f063b99572de48cb91aa5ab5d.zip
gcc-cf785618ecc90e3f063b99572de48cb91aa5ab5d.tar.gz
gcc-cf785618ecc90e3f063b99572de48cb91aa5ab5d.tar.bz2
openmp: Notice reduction decl in outer contexts after adding it to shared [PR93515]
If we call omp_add_variable, following omp_notice_variable will already find it on that construct and not go through outer constructs, the following patch fixes that. Note, this still doesn't follow OpenMP 5.0 semantics on target combined with other constructs with reduction/lastprivate/linear clauses, will handle that for GCC11. 2020-02-06 Jakub Jelinek <jakub@redhat.com> PR libgomp/93515 * gimplify.c (gimplify_scan_omp_clauses) <do_notice>: If adding shared clause, call omp_notice_variable on outer context if any.
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/gimplify.c10
2 files changed, 13 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c31b861..df6bbe6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2020-02-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR libgomp/93515
+ * gimplify.c (gimplify_scan_omp_clauses) <do_notice>: If adding
+ shared clause, call omp_notice_variable on outer context if any.
+
2020-02-05 Jason Merrill <jason@redhat.com>
PR c++/92003
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index e50be57..aafef78 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -9464,9 +9464,13 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
== POINTER_TYPE))))
omp_firstprivatize_variable (outer_ctx, decl);
else
- omp_add_variable (outer_ctx, decl,
- GOVD_SEEN | GOVD_SHARED);
- omp_notice_variable (outer_ctx, decl, true);
+ {
+ omp_add_variable (outer_ctx, decl,
+ GOVD_SEEN | GOVD_SHARED);
+ if (outer_ctx->outer_context)
+ omp_notice_variable (outer_ctx->outer_context, decl,
+ true);
+ }
}
}
if (outer_ctx)