re PR c++/63249 ([OpenMP] Spurious »set but not used« warnings when actually used...
authorJakub Jelinek <jakub@redhat.com>
Thu, 25 Sep 2014 06:47:43 +0000 (08:47 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 25 Sep 2014 06:47:43 +0000 (08:47 +0200)
PR c++/63249
* semantics.c (handle_omp_array_sections_1): Call mark_rvalue_use
on low_bound and length.

* g++.dg/gomp/pr63249.C: New test.
* c-c++-common/gomp/pr63249.c: New test.

2014-09-25  Thomas Schwinge  <thomas@codesourcery.com>

PR c++/63249
* c-parser.c (c_parser_omp_variable_list): Call mark_exp_read
on low_bound and length.

From-SVN: r215580

gcc/c/ChangeLog
gcc/c/c-parser.c
gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/gomp/pr63249.c [new file with mode: 0644]
gcc/testsuite/g++.dg/gomp/pr63249.C [new file with mode: 0644]

index 67099c1081a79f83fff1507d0a021e4a143e726b..cb69773247c17d15e782b266dfa97983a7f513e6 100644 (file)
@@ -1,3 +1,9 @@
+2014-09-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/63249
+       * c-parser.c (c_parser_omp_variable_list): Call mark_exp_read
+       on low_bound and length.
+
 2014-09-24  Marek Polacek  <polacek@redhat.com>
 
        PR c/61405
index 71f40b7deaf30be562272cccee2f59f9c0c2e2f5..0d159fd3bf3448cc78e6b226621241171bfa215f 100644 (file)
@@ -9882,7 +9882,10 @@ c_parser_omp_variable_list (c_parser *parser,
 
                  c_parser_consume_token (parser);
                  if (!c_parser_next_token_is (parser, CPP_COLON))
-                   low_bound = c_parser_expression (parser).value;
+                   {
+                     low_bound = c_parser_expression (parser).value;
+                     mark_exp_read (low_bound);
+                   }
                  if (c_parser_next_token_is (parser, CPP_CLOSE_SQUARE))
                    length = integer_one_node;
                  else
@@ -9895,7 +9898,10 @@ c_parser_omp_variable_list (c_parser *parser,
                          break;
                        }
                      if (!c_parser_next_token_is (parser, CPP_CLOSE_SQUARE))
-                       length = c_parser_expression (parser).value;
+                       {
+                         length = c_parser_expression (parser).value;
+                         mark_exp_read (length);
+                       }
                    }
                  /* Look for the closing `]'.  */
                  if (!c_parser_require (parser, CPP_CLOSE_SQUARE,
index ee5169f6c7cd634ccb1257887d36712c9f342767..2457ccdb734c95ecd1835910e7eaa026fc5c91d7 100644 (file)
@@ -1,3 +1,9 @@
+2014-09-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/63249
+       * semantics.c (handle_omp_array_sections_1): Call mark_rvalue_use
+       on low_bound and length.
+
 2014-09-24  Aldy Hernandez  <aldyh@redhat.com>
 
        * class.c, decl.c, optimize.c: Rename all instances of
index 2728f5887f119849b94d6fd66cedfc167453a75c..debd78562fbc76950d62f7f62f99d134e9a68fb2 100644 (file)
@@ -4291,6 +4291,10 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
                length);
       return error_mark_node;
     }
+  if (low_bound)
+    low_bound = mark_rvalue_use (low_bound);
+  if (length)
+    length = mark_rvalue_use (length);
   if (low_bound
       && TREE_CODE (low_bound) == INTEGER_CST
       && TYPE_PRECISION (TREE_TYPE (low_bound))
index ef8faa3deeaf11b718b37bb8e798c6ad9eec688c..6a201b6b7428029bb031b59e19ed04422b544b58 100644 (file)
@@ -1,3 +1,9 @@
+2014-09-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/63249
+       * g++.dg/gomp/pr63249.C: New test.
+       * c-c++-common/gomp/pr63249.c: New test.
+
 2014-09-25  Tobias Burnus  <burnus@net-b.de>
 
        * gfortran.dg/coarray/collectives_3.f90: New.
diff --git a/gcc/testsuite/c-c++-common/gomp/pr63249.c b/gcc/testsuite/c-c++-common/gomp/pr63249.c
new file mode 100644 (file)
index 0000000..878788a
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR c++/63249 */
+/* { dg-do compile } */
+/* { dg-options "-Wall -W -fopenmp" } */
+
+int
+foo (int *v, int A, int B)     /* { dg-bogus "set but not used" } */
+{
+  int r = 0;
+  int a = 2;                   /* { dg-bogus "set but not used" } */
+  int b = 4;                   /* { dg-bogus "set but not used" } */
+#pragma omp target map(to: v[a:b])
+  r |= v[3];
+#pragma omp target map(to: v[A:B])
+  r |= v[3];
+  return r;
+}
diff --git a/gcc/testsuite/g++.dg/gomp/pr63249.C b/gcc/testsuite/g++.dg/gomp/pr63249.C
new file mode 100644 (file)
index 0000000..80f763a
--- /dev/null
@@ -0,0 +1,35 @@
+// PR c++/63249
+// { dg-do compile }
+// { dg-options "-Wall -W -fopenmp" }
+
+template <int N>
+int
+foo (int *v, int A, int B)     // { dg-bogus "set but not used" }
+{
+  int r = 0;
+  int a = 2;                   // { dg-bogus "set but not used" }
+  int b = 4;                   // { dg-bogus "set but not used" }
+#pragma omp target map(to: v[a:b])
+  r |= v[3];
+#pragma omp target map(to: v[A:B])
+  r |= v[3];
+  return r;
+}
+
+template <typename T>
+int
+bar (T *v, T A, T B)           // { dg-bogus "set but not used" }
+{
+  T r = 0, a = 2, b = 4;       // { dg-bogus "set but not used" }
+#pragma omp target map(to: v[a:b])
+  r |= v[3];
+#pragma omp target map(to: v[A:B])
+  r |= v[3];
+  return r;
+}
+
+int
+baz (int *v, int A, int B)
+{
+  return foo<0> (v, A, B) + bar (v, A, B);
+}