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, 6 Feb 2020 08:15:13 +0000 (09:15 +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 c31b861fff8ae47c0655b4ea5e06091ea3c8e48a..df6bbe608db878c4721ebf44b8c276df415d22ec 100644 (file)
@@ -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
index e50be5706c762a8d08f67a606ee83e90c2de6758..aafef7866373264047252a300f5d253bd493d10e 100644 (file)
@@ -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)