re PR middle-end/72781 (-Wuninitialized false positives in OpenMP code)
authorJakub Jelinek <jakub@redhat.com>
Mon, 8 Aug 2016 19:46:36 +0000 (21:46 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 8 Aug 2016 19:46:36 +0000 (21:46 +0200)
PR middle-end/72781
* omp-low.c (lower_lastprivate_clauses): Set TREE_NO_WARNING on the
private vars for lastprivate and for linear iterator.

* gcc.dg/gomp/pr72781.c: New test.

From-SVN: r239249

gcc/ChangeLog
gcc/omp-low.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/gomp/pr72781.c [new file with mode: 0644]

index e6f076194df95eef153dacc0152e39f0d0b5145f..3cf7074def521c1af23e7bb010ea0833d54ada5d 100644 (file)
@@ -1,5 +1,9 @@
 2016-08-08  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/72781
+       * omp-low.c (lower_lastprivate_clauses): Set TREE_NO_WARNING on the
+       private vars for lastprivate and for linear iterator.
+
        PR middle-end/68762
        * omp-simd-clone.c: Include varasm.h.
        (simd_clone_create): Copy over DECL_COMDAT, DECL_WEAK, DECL_EXTERNAL,
index c75452c81c85b76f51b27d06ee8ce0b7e921fd5b..678c36ec30749286f26e7ee96fb4900e1de24ce6 100644 (file)
@@ -5455,7 +5455,15 @@ lower_lastprivate_clauses (tree clauses, tree predicate, gimple_seq *stmt_list,
              new_var = lookup_decl (var, ctx->outer);
            }
          else
-           new_var = lookup_decl (var, ctx);
+           {
+             new_var = lookup_decl (var, ctx);
+             /* Avoid uninitialized warnings for lastprivate and
+                for linear iterators.  */
+             if (predicate
+                 && (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
+                     || OMP_CLAUSE_LINEAR_NO_COPYIN (c)))
+               TREE_NO_WARNING (new_var) = 1;
+           }
 
          if (simduid && DECL_HAS_VALUE_EXPR_P (new_var))
            {
index 0822a8af2fa376f23d431b1f89ed50c9bbaa4d91..ddc0980566bc76d57937ff40057a9c066266eb02 100644 (file)
@@ -1,5 +1,8 @@
 2016-08-08  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/72781
+       * gcc.dg/gomp/pr72781.c: New test.
+
        PR middle-end/68762
        * g++.dg/vect/pr68762-1.cc: New test.
        * g++.dg/vect/pr68762-2.cc: New test.
diff --git a/gcc/testsuite/gcc.dg/gomp/pr72781.c b/gcc/testsuite/gcc.dg/gomp/pr72781.c
new file mode 100644 (file)
index 0000000..377fdde
--- /dev/null
@@ -0,0 +1,23 @@
+/* PR middle-end/72781 */
+/* { dg-do compile } */
+/* { dg-additional-options "-O2 -Wuninitialized" } */
+
+int u;
+
+void
+foo (int *p)
+{
+  int i;
+  #pragma omp for simd lastprivate(u) schedule (static, 32)    /* { dg-bogus "may be used uninitialized in this function" } */
+  for (i = 0; i < 1024; i++)
+    u = p[i];
+}
+
+void
+bar (int *p)
+{
+  int i;
+  #pragma omp taskloop simd lastprivate(u)     /* { dg-bogus "may be used uninitialized in this function" } */
+  for (i = 0; i < 1024; i++)
+    u = p[i];
+}