mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-25 23:16:15 +08:00
c++: Fix bogus warnings about ignored annotations [PR114691]
The middle-end warns about the ANNOTATE_EXPR added for while/for loops if they declare a var inside of the loop condition. This is because the assumption is that ANNOTATE_EXPR argument is used immediately in a COND_EXPR (later GIMPLE_COND), but simplify_loop_decl_cond wraps the ANNOTATE_EXPR inside of a TRUTH_NOT_EXPR, so it no longer holds. The following patch fixes that by adding the TRUTH_NOT_EXPR inside of the ANNOTATE_EXPR argument if any. 2024-04-12 Jakub Jelinek <jakub@redhat.com> PR c++/114691 * semantics.cc (simplify_loop_decl_cond): Use cp_build_unary_op with TRUTH_NOT_EXPR on ANNOTATE_EXPR argument (if any) rather than ANNOTATE_EXPR itself. * g++.dg/ext/pr114691.C: New test.
This commit is contained in:
parent
d74fe10b13
commit
91146346f5
@ -799,7 +799,11 @@ simplify_loop_decl_cond (tree *cond_p, tree body)
|
||||
*cond_p = boolean_true_node;
|
||||
|
||||
if_stmt = begin_if_stmt ();
|
||||
cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, false, tf_warning_or_error);
|
||||
cond_p = &cond;
|
||||
while (TREE_CODE (*cond_p) == ANNOTATE_EXPR)
|
||||
cond_p = &TREE_OPERAND (*cond_p, 0);
|
||||
*cond_p = cp_build_unary_op (TRUTH_NOT_EXPR, *cond_p, false,
|
||||
tf_warning_or_error);
|
||||
finish_if_stmt_cond (cond, if_stmt);
|
||||
finish_break_stmt ();
|
||||
finish_then_clause (if_stmt);
|
||||
|
22
gcc/testsuite/g++.dg/ext/pr114691.C
Normal file
22
gcc/testsuite/g++.dg/ext/pr114691.C
Normal file
@ -0,0 +1,22 @@
|
||||
// PR c++/114691
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2 -Wall" }
|
||||
|
||||
void qux (int);
|
||||
int foo (int);
|
||||
|
||||
void
|
||||
bar (int x)
|
||||
{
|
||||
#pragma GCC novector
|
||||
while (int y = foo (x)) // { dg-bogus "ignoring loop annotation" }
|
||||
qux (y);
|
||||
}
|
||||
|
||||
void
|
||||
baz (int x)
|
||||
{
|
||||
#pragma GCC novector
|
||||
for (; int y = foo (x); ) // { dg-bogus "ignoring loop annotation" }
|
||||
qux (y);
|
||||
}
|
Loading…
Reference in New Issue
Block a user