]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
openmp: Notice reduction decl in outer contexts after adding it to shared [PR93515]
authorJakub Jelinek <jakub@redhat.com>
Thu, 6 Feb 2020 08:15:13 +0000 (09:15 +0100)
committerJakub Jelinek <jakub@redhat.com>
Thu, 13 Feb 2020 20:44:14 +0000 (21:44 +0100)
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.

gcc/ChangeLog
gcc/gimplify.c

index a4435086f0235a885513d336acd4fd9d13b6c35d..bc199e5956f419135443fcc1a10226baacd24701 100644 (file)
@@ -1,6 +1,12 @@
 2020-02-13  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       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  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/93555
index a0cb6c402bcf732f292987a2066012d17a6cb093..c57113cda1db91880fe432a97fbb36613be6d61c 100644 (file)
@@ -9081,9 +9081,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)