diff options
author | manu <manu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-10-24 10:09:06 +0000 |
---|---|---|
committer | manu <manu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-10-24 10:09:06 +0000 |
commit | 82012ffee75f593d1d0e48a4d1b2fa4843d8955d (patch) | |
tree | 700b750bc17a07e7749365330c49e0f595aaa435 /gcc/testsuite/g++.dg/warn/Wparentheses-25.C | |
parent | c215ee9eb154ed539056d33520b0a1f132d47148 (diff) | |
download | gcc-82012ffee75f593d1d0e48a4d1b2fa4843d8955d.tar.gz |
2008-10-24 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR c/7543
* value-prof.c (gimple_stringop_fixed_value): Use parentheses
around bit operation.
* profile.c (is_edge_inconsistent): Likewise.
* fold-const.c (truth_value_p): Move from here...
* tree.h (truth_value_p): ... to here.
* c-tree.h (c_expr): Update description of original_code.
* c-typeck.c (parser_build_unary_op): Set original_code.
(parser_build_binary_op): Update call to warn_about_parentheses.
* c-common.c (warn_about_parentheses): Take two additional
arguments of the operands. Use a switch. Quote operators
appropriately. Define macro APPEARS_TO_BE_BOOLEAN_EXPR_P.
Add warning about !x | y and !x & y.
* c-common.h (warn_about_parentheses): Update declaration.
cp/
* typeck.c (build_x_binary_op): Update call to
warn_about_parentheses.
* parser.c (cp_parser_binary_expression): Add note about passing
the correct code for unary expressions.
testsuite/
* gcc.dg/Wparentheses-11.c: New.
* g++.dg/warn/Wparentheses-25.C: New. XFAILED.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141340 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/g++.dg/warn/Wparentheses-25.C')
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wparentheses-25.C | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/warn/Wparentheses-25.C b/gcc/testsuite/g++.dg/warn/Wparentheses-25.C new file mode 100644 index 00000000000..ab00c25f02a --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wparentheses-25.C @@ -0,0 +1,259 @@ +/* PR 7543. Test operation of -Wparentheses. Precedence warnings. + !a | b and !a & b. */ +/* { dg-do compile } */ +/* { dg-options "-Wparentheses" } */ +// C++ version of Wparentheses-11.c +int foo (int); + +int +bar (int a, int b, int c) +{ + foo (!a & b); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (b < c)); + foo (!a & (b > c)); + foo (!a & (b == c)); + foo (!a & (b != c)); + foo (!a & (b <= c)); + foo (!a & (b >= c)); + foo (!a & (b && c)); + foo (!a & (b || c)); + foo (!a & !b); + foo (!(a & b)); + foo ((!a) & b); + foo (!a & 2); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (2 < c)); + foo (!a & (2 > c)); + foo (!a & (2 == c)); + foo (!a & (2 != c)); + foo (!a & (2 <= c)); + foo (!a & (2 >= c)); + foo (!a & (2 && c)); + foo (!a & (2 || c)); + foo (!a & !2); + foo (!(a & 2)); + foo ((!a) & 2); + foo (!1 & 2); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 & (2 < c)); + foo (!1 & (2 > c)); + foo (!1 & (2 == c)); + foo (!1 & (2 != c)); + foo (!1 & (2 <= c)); + foo (!1 & (2 >= c)); + foo (!1 & (2 && c)); + foo (!1 & (2 || c)); + foo (!1 & !2); + foo (!(1 & 2)); + + foo (!a | b); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (b < c)); + foo (!a | (b > c)); + foo (!a | (b == c)); + foo (!a | (b != c)); + foo (!a | (b <= c)); + foo (!a | (b >= c)); + foo (!a | (b && c)); + foo (!a | (b || c)); + foo (!a | !b); + foo (!(a | b)); + foo ((!a) | b); + foo (!a | 2); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (2 < c)); + foo (!a | (2 > c)); + foo (!a | (2 == c)); + foo (!a | (2 != c)); + foo (!a | (2 <= c)); + foo (!a | (2 >= c)); + foo (!a | (2 && c)); + foo (!a | (2 || c)); + foo (!a | !2); + foo (!(a | 2)); + foo ((!a) | 2); + foo (!1 | 2); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 | (2 < c)); + foo (!1 | (2 > c)); + foo (!1 | (2 == c)); + foo (!1 | (2 != c)); + foo (!1 | (2 <= c)); + foo (!1 | (2 >= c)); + foo (!1 | (2 && c)); + foo (!1 | (2 || c)); + foo (!1 | !2); + foo (!(1 | 2)); + foo ((!1) | 2); + + foo (b & !a); /* { dg-bogus "parentheses" "bogus warning" } */ + foo ((b < c) & !a); + foo ((b > c) & !a); + foo ((b == c) & !a); + foo ((b != c) & !a); + foo ((b <= c) & !a); + foo ((b >= c) & !a); + foo ((b && c) & !a); + foo ((b || c) & !a); + foo (!b & !a); + foo (!(b & a)); + foo (b & (!a)); + foo (2 & !a); /* { dg-bogus "parentheses" "correct warning" } */ + foo ((2 < c) & !a); + foo ((2 > c) & !a); + foo ((2 == c) & !a); + foo ((2 != c) & !a); + foo ((2 <= c) & !a); + foo ((2 >= c) & !a); + foo ((2 && c) & !a); + foo ((2 || c) & !a); + foo (!2 & !a); + foo (!(2 & a)); + foo (2 & (!a)); + foo (2 & !1); /* { dg-bogus "parentheses" "correct warning" } */ + foo ((2 < c) & !1); + foo ((2 > c) & !1); + foo ((2 == c) & !1); + foo ((2 != c) & !1); + foo ((2 <= c) & !1); + foo ((2 >= c) & !1); + foo ((2 && c) & !1); + foo ((2 || c) & !1); + foo (!2 & !1); + foo (!(2 & 1)); + + foo (b | !a); /* { dg-bogus "parentheses" "correct warning" } */ + foo ((b < c) | !a); + foo ((b > c) | !a); + foo ((b == c) | !a); + foo ((b != c) | !a); + foo ((b <= c) | !a); + foo ((b >= c) | !a); + foo ((b && c) | !a); + foo ((b || c) | !a); + foo (!b | !a); + foo (!(b | a)); + foo (b | (!a)); + foo (2 | !a); /* { dg-bogus "parentheses" "correct warning" } */ + foo ((2 < c) | !a); + foo ((2 > c) | !a); + foo ((2 == c) | !a); + foo ((2 != c) | !a); + foo ((2 <= c) | !a); + foo ((2 >= c) | !a); + foo ((2 && c) | !a); + foo ((2 || c) | !a); + foo (!2 | !a); + foo (!(2 | a)); + foo (2 | (!a)); + foo (2 | !1); /* { dg-bogus "parentheses" "correct warning" } */ + foo ((2 < c) | !1); + foo ((2 > c) | !1); + foo ((2 == c) | !1); + foo ((2 != c) | !1); + foo ((2 <= c) | !1); + foo ((2 >= c) | !1); + foo ((2 && c) | !1); + foo ((2 || c) | !1); + foo (!2 | !1); + foo (!(2 | 1)); + foo (2 | (!1)); +} + + +int +baz (int a, int b, int c) +{ + foo (!a & (b << c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (b >> c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (b + c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (b - c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (b = c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & ~b); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (b & c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (b | c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & 2); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (2 << c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (2 >> c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (2 + c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (2 - c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (c = 2)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & ~2); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (2 & c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a & (2 | c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 & (2 << c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 & (2 >> c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 & (2 + c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 & (2 - c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 & (c = 2)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 & ~2); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 & (2 & c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 & (2 | c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (b << c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (b >> c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (b + c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (b - c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (b = c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | ~b); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (b & c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (b | c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (2 << c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (2 >> c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (2 + c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (2 - c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (c = 2)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | ~2); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (2 & c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!a | (2 | c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 | (2 << c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 | (2 >> c));/* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 | (2 + c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 | (2 - c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 | (c = 2)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 | ~2); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 | (2 & c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo (!1 | (2 | c)); /* { dg-warning "parentheses" "correct warning" { xfail *-*-* } } */ + foo ((b << c) & !a); + foo ((b >> c) & !a); + foo ((b + c) & !a); + foo ((b - c) & !a); + foo ((b = c) & !a); + foo (~b & !a); + foo ((b & c) & !a); + foo ((b | c) & !a); + foo ((2 << c) & !a); + foo ((2 >> c) & !a); + foo ((2 + c) & !a); + foo ((2 - c) & !a); + foo ((c = 2) & !a); + foo (~2 & !a); + foo ((2 & c) & !a); + foo ((2 | c) & !a); + foo ((2 << c) & !1); + foo ((2 >> c) & !1); + foo ((2 + c) & !1); + foo ((2 - c) & !1); + foo ((c = 2) & !1); + foo (~2 & !1); + foo ((2 & c) & !1); + foo ((2 | c) & !1); + foo ((b << c) | !a); + foo ((b >> c) | !a); + foo ((b + c) | !a); + foo ((b - c) | !a); + foo ((b = c) | !a); + foo (~b | !a); + foo ((b & c) | !a); + foo ((b | c) | !a); + foo ((2 << c) | !a); + foo ((2 >> c) | !a); + foo ((2 + c) | !a); + foo ((2 - c) | !a); + foo ((c = 2) | !a); + foo (~2 | !a); + foo ((2 & c) | !a); + foo ((2 | c) | !a); + foo ((2 << c) | !1); + foo ((2 >> c) | !1); + foo ((2 + c) | !1); + foo ((2 - c) | !1); + foo ((c = 2) | !1); + foo (~2 | !1); + foo ((2 & c) | !1); + foo ((2 | c) | !1); +} |