]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR middle-end/80809 (Multi-free error for variable size array used withi...
authorJakub Jelinek <jakub@redhat.com>
Thu, 22 Jun 2017 11:08:25 +0000 (13:08 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 22 Jun 2017 11:08:25 +0000 (13:08 +0200)
Backported from mainline
2017-05-22  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/80809
* gimplify.c (omp_add_variable): For GOVD_DEBUG_PRIVATE use
GOVD_SHARED rather than GOVD_PRIVATE with it.
(gimplify_adjust_omp_clauses_1, gimplify_adjust_omp_clauses): Expect
GOVD_SHARED rather than GOVD_PRIVATE with GOVD_DEBUG_PRIVATE.

* testsuite/libgomp.c/pr80809-1.c: New test.

From-SVN: r249505

gcc/ChangeLog
gcc/gimplify.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.c/pr80809-1.c [new file with mode: 0644]

index 5afdad3080105fe9776babeed75149f9d33dd4c0..762bb26846d9ebe449c3c61d1a0c00c6607aee30 100644 (file)
@@ -3,6 +3,12 @@
        Backported from mainline
        2017-05-22  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/80809
+       * gimplify.c (omp_add_variable): For GOVD_DEBUG_PRIVATE use
+       GOVD_SHARED rather than GOVD_PRIVATE with it.
+       (gimplify_adjust_omp_clauses_1, gimplify_adjust_omp_clauses): Expect
+       GOVD_SHARED rather than GOVD_PRIVATE with GOVD_DEBUG_PRIVATE.
+
        PR middle-end/80853
        * omp-low.c (lower_reduction_clauses): Pass OMP_CLAUSE_PRIVATE
        as last argument to build_outer_var_ref for pointer bases of array
index 505735957405ee6ceefcff4a48949863fa6bb0f8..b84372f7a8931006dee41459d3907a2dec5c0ee2 100644 (file)
@@ -5868,7 +5868,7 @@ omp_add_variable (struct gimplify_omp_ctx *ctx, tree decl, unsigned int flags)
         of PRIVATE.  The sharing would take place via the pointer variable
         which we remapped above.  */
       if (flags & GOVD_SHARED)
-       flags = GOVD_PRIVATE | GOVD_DEBUG_PRIVATE
+       flags = GOVD_SHARED | GOVD_DEBUG_PRIVATE
                | (flags & (GOVD_SEEN | GOVD_EXPLICIT));
 
       /* We're going to make use of the TYPE_SIZE_UNIT at least in the
@@ -7775,7 +7775,7 @@ gimplify_adjust_omp_clauses_1 (splay_tree_node n, void *data)
     return 0;
   if (flags & GOVD_DEBUG_PRIVATE)
     {
-      gcc_assert ((flags & GOVD_DATA_SHARE_CLASS) == GOVD_PRIVATE);
+      gcc_assert ((flags & GOVD_DATA_SHARE_CLASS) == GOVD_SHARED);
       private_debug = true;
     }
   else if (flags & GOVD_MAP)
@@ -7988,7 +7988,7 @@ gimplify_adjust_omp_clauses (gimple_seq *pre_p, gimple_seq body, tree *list_p,
                {
                  gcc_assert ((n->value & GOVD_DEBUG_PRIVATE) == 0
                              || ((n->value & GOVD_DATA_SHARE_CLASS)
-                                 == GOVD_PRIVATE));
+                                 == GOVD_SHARED));
                  OMP_CLAUSE_SET_CODE (c, OMP_CLAUSE_PRIVATE);
                  OMP_CLAUSE_PRIVATE_DEBUG (c) = 1;
                }
index ba2d72b118e1d6ac2b851ac09460b114b2736a8a..a5ef15f71f61b9722f4efeb0e2d8e15b75512400 100644 (file)
@@ -3,6 +3,9 @@
        Backported from mainline
        2017-05-22  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/80809
+       * testsuite/libgomp.c/pr80809-1.c: New test.
+
        PR middle-end/80853
        * testsuite/libgomp.c/pr80853.c: New test.
 
diff --git a/libgomp/testsuite/libgomp.c/pr80809-1.c b/libgomp/testsuite/libgomp.c/pr80809-1.c
new file mode 100644 (file)
index 0000000..07abb49
--- /dev/null
@@ -0,0 +1,29 @@
+/* PR middle-end/80809 */
+/* { dg-do run } */
+
+__attribute__((noinline, noclone)) void
+foo (int x)
+{
+  int i, j, v[x], *w[16];
+  for (i = 0; i < x; i++)
+    v[i] = i;
+#pragma omp parallel
+#pragma omp single
+  for (i = 0; i < 16; i++)
+  /* Make sure v is implicitly determined shared in task, because it
+     is shared on the parallel.  */
+#pragma omp task private (j)
+    w[i] = v;
+  for (i = 0; i < 16; i++)
+    if (w[i] != v)
+      __builtin_abort ();
+}
+
+int
+main ()
+{
+  foo (4);
+  foo (27);
+  foo (196);
+  return 0;
+}