From 3e4b4ded2f5a0f3a1d90dbc4430f8731c0584774 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 30 Aug 2019 14:32:15 +0200 Subject: [PATCH] backport: re PR c++/89796 (Incorrect warning generated with OpenMP atomic capture) Backported from mainline 2019-03-26 Jakub Jelinek 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 | 6 ++++ gcc/cp/semantics.c | 5 +++ gcc/testsuite/ChangeLog | 6 ++++ gcc/testsuite/g++.dg/gomp/pr89796.C | 53 +++++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/gomp/pr89796.c | 23 +++++++++++++ 5 files changed, 93 insertions(+) create mode 100644 gcc/testsuite/g++.dg/gomp/pr89796.C create mode 100644 gcc/testsuite/gcc.dg/gomp/pr89796.c diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 14beaa8c0cf7..b4ebbebe9a1b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,6 +1,12 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-03-26 Jakub Jelinek + + PR c++/89796 + * semantics.c (finish_omp_atomic): Add warning_sentinel for + -Wunused-value around finish_expr_stmt call. + 2019-03-22 Jakub Jelinek PR c++/60702 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 342857a0cb15..6ed0495c33bd 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -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); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3a67b26359d2..31598e87e70f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,12 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-03-26 Jakub Jelinek + + PR c++/89796 + * g++.dg/gomp/pr89796.C: New test. + * gcc.dg/gomp/pr89796.c: New test. + 2019-03-25 Jakub Jelinek 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 index 000000000000..6bbc34eae324 --- /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 +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 +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 000000000000..14f509311fae --- /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; +} -- 2.47.2