aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-03-26 08:54:02 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2019-03-26 08:54:02 +0100
commit22a32ea068e2ec48fc4d377d2c450a873e76faca (patch)
treea3c75ea28a53fe313abce17f436ebd9d4a291175 /gcc
parent7a03cad76c1d2d7f156424f0bd9290dfcb1d4488 (diff)
downloadgcc-22a32ea068e2ec48fc4d377d2c450a873e76faca.zip
gcc-22a32ea068e2ec48fc4d377d2c450a873e76faca.tar.gz
gcc-22a32ea068e2ec48fc4d377d2c450a873e76faca.tar.bz2
re PR c++/89796 (Incorrect warning generated with OpenMP atomic capture)
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: r269933
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr89796.C53
-rw-r--r--gcc/testsuite/gcc.dg/gomp/pr89796.c23
5 files changed, 93 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 703c0f1..80d4ae3 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+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-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/84661
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 15b766d..d7e97e0 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -8997,6 +8997,11 @@ finish_omp_atomic (location_t loc, enum tree_code code, enum tree_code opcode,
OMP_ATOMIC_MEMORY_ORDER (stmt) = mo;
SET_EXPR_LOCATION (stmt, loc);
}
+
+ /* 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);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ddd5f50..f5d92b6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+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 David Malcolm <dmalcolm@redhat.com>
PR rtl-optimization/88347
diff --git a/gcc/testsuite/g++.dg/gomp/pr89796.C b/gcc/testsuite/g++.dg/gomp/pr89796.C
new file mode 100644
index 0000000..6bbc34e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/pr89796.C
@@ -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
index 0000000..14f5093
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/gomp/pr89796.c
@@ -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;
+}