]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR c++/89796 (Incorrect warning generated with OpenMP atomic capture)
authorJakub Jelinek <jakub@redhat.com>
Fri, 30 Aug 2019 12:32:15 +0000 (14:32 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 30 Aug 2019 12:32:15 +0000 (14:32 +0200)
Backported from mainline
2019-03-26  Jakub Jelinek  <jakub@redhat.com>

PR c++/89796
* semantics.c (finish_omp_atomic): Add warning_sentinel for
-Wunused-value around finish_expr_stmt call.

* g++.dg/gomp/pr89796.C: New test.
* gcc.dg/gomp/pr89796.c: New test.

From-SVN: r275142

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

index 14beaa8c0cf7154d4ccb5e27e6bdb30b602da308..b4ebbebe9a1b0fc8dd4d89e406cc9b0598557e5b 100644 (file)
@@ -1,6 +1,12 @@
 2019-08-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2019-03-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/89796
+       * semantics.c (finish_omp_atomic): Add warning_sentinel for
+       -Wunused-value around finish_expr_stmt call.
+
        2019-03-22  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/60702
index 342857a0cb1547ef808fca28183676d8747db1a4..6ed0495c33bd2c04ef4c1c07e1d4f1efd8973fbc 100644 (file)
@@ -8632,6 +8632,11 @@ finish_omp_atomic (enum tree_code code, enum tree_code opcode, tree lhs,
       stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
       OMP_ATOMIC_SEQ_CST (stmt) = seq_cst;
     }
+
+  /* Avoid -Wunused-value warnings here, the whole construct has side-effects
+     and even if it might be wrapped from fold-const.c or c-omp.c wrapped
+     in some tree that appears to be unused, the value is not unused.  */
+  warning_sentinel w (warn_unused_value);
   finish_expr_stmt (stmt);
 }
 
index 3a67b26359d22df591e48b35918bc69a31b8746a..31598e87e70f7abe744c7c678967eaa61d785a37 100644 (file)
@@ -1,6 +1,12 @@
 2019-08-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2019-03-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/89796
+       * g++.dg/gomp/pr89796.C: New test.
+       * gcc.dg/gomp/pr89796.c: New test.
+
        2019-03-25  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/60702
diff --git a/gcc/testsuite/g++.dg/gomp/pr89796.C b/gcc/testsuite/g++.dg/gomp/pr89796.C
new file mode 100644 (file)
index 0000000..6bbc34e
--- /dev/null
@@ -0,0 +1,53 @@
+// PR c++/89796
+// { dg-do compile }
+// { dg-additional-options "-Wunused-value" }
+
+int
+f1 (int &c)
+{
+  int r;
+  #pragma omp atomic capture   // { dg-bogus "value computed is not used" }
+  { r = c; c++; }
+  return r;
+}
+
+template <int N>
+int
+f2 (int &c)
+{
+  int r;
+  #pragma omp atomic capture   // { dg-bogus "value computed is not used" }
+  { r = c; c++; }
+  return r;
+}
+
+int
+f3 (int &c)
+{
+  return f2 <0> (c);
+}
+
+int
+f4 (int *p)
+{
+  int r;
+  #pragma omp atomic capture   // { dg-bogus "value computed is not used" }
+  { r = *p; (*p)++; }
+  return r;
+}
+
+template <int N>
+int
+f5 (int *p)
+{
+  int r;
+  #pragma omp atomic capture   // { dg-bogus "value computed is not used" }
+  { r = *p; (*p)++; }
+  return r;
+}
+
+int
+f6 (int *p)
+{
+  return f5 <0> (p);
+}
diff --git a/gcc/testsuite/gcc.dg/gomp/pr89796.c b/gcc/testsuite/gcc.dg/gomp/pr89796.c
new file mode 100644 (file)
index 0000000..14f5093
--- /dev/null
@@ -0,0 +1,23 @@
+/* PR c++/89796 */
+/* { dg-do compile } */
+/* { dg-additional-options "-Wunused-value" } */
+
+int
+f1 (int *p)
+{
+  int r;
+  #pragma omp atomic capture           /* { dg-bogus "value computed is not used" } */
+  { r = *p; (*p)++; }
+  return r;
+}
+
+int
+f2 (int *p)
+{
+  int s
+    = ({ int r;
+        #pragma omp atomic capture     /* { dg-bogus "value computed is not used" } */
+        { r = *p; (*p)++; }
+        r; });
+  return s;
+}