g++ generates less warnings when using -Wparentheses than gcc. For instance gcc warns about if (a>0 & b>0) ... (warning: suggest parentheses around comparison in operand of &) but g++ does not. And gcc warns about char a = 1024; (warning: overflow in implicit constant conversion) but g++ does not.
(In reply to comment #0) > g++ generates less warnings when using -Wparentheses than gcc. For instance > gcc warns about > > if (a>0 & b>0) > ... This because this warning is only in the C front-end. Please file the "overflow in implicit constant conversion" warning into a different bug.
Note here is the testcase: int f(int a, int b) { if (a>0 & b>0) /* { dg-warning "" } */ return 210; return 0; }
I have a patch to add full support for -Wparentheses to the C++ frontend, which I will submit when copyright status is cleared up.
what is the status of these patches? I just started to look into this..
The patches are ready to go in as soon as Google's copyright assignment clears. The assignment has been signed on both sides and is in the mail, or so I am told.
Copyright status is cleared, my patch is here: http://gcc.gnu.org/ml/gcc-patches/2006-12/msg00868.html
Subject: Bug number PR c++/19564 A patch for this bug has been added to the patch tracker. The mailing list url for the patch is http://gcc.gnu.org/ml/gcc-patches/2006-12/msg00868.html
Subject: Bug 19564 Author: ian Date: Thu Dec 14 05:49:06 2006 New Revision: 119855 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=119855 Log: PR c++/19564 PR c++/19756 gcc/: * c-typeck.c (parser_build_binary_op): Move parentheses warnings to warn_about_parentheses in c-common.c. * c-common.c (warn_about_parentheses): New function. * c-common.h (warn_about_parentheses): Declare. * doc/invoke.texi (Warning Options): Update -Wparentheses description. gcc/cp/: * parser.c (cp_parser_expression_stack_entry): Add field lhs_type. (cp_parser_binary_expression): Track tree code of left hand side of expression. Use it when calling build_x_binary_op. (cp_parser_selection_statement): Add if_p parameter. Change all callers. Warn about ambiguous else. (cp_parser_statement): Add if_p parameter. Change all callers. (cp_parser_implicitly_scoped_statement): Likewise. * typeck.c (build_x_binary_op): Add parameters arg1_code and arg2_code. Change all callers. Call warn_about_parentheses. * cp-tree.h (build_x_binary_op): Update declaration. gcc/testsuite/: * g++.dg/warn/Wparentheses-5.C: New test. * g++.dg/warn/Wparentheses-6.C: New test. * g++.dg/warn/Wparentheses-7.C: New test. * g++.dg/warn/Wparentheses-8.C: New test. * g++.dg/warn/Wparentheses-9.C: New test. * g++.dg/warn/Wparentheses-10.C: New test. * g++.dg/warn/Wparentheses-11.C: New test. * g++.dg/warn/Wparentheses-12.C: New test. * g++.dg/warn/Wparentheses-13.C: New test. * g++.dg/warn/Wparentheses-14.C: New test. * g++.dg/warn/Wparentheses-15.C: New test. * g++.dg/warn/Wparentheses-16.C: New test. * g++.dg/warn/Wparentheses-17.C: New test. * g++.dg/warn/Wparentheses-18.C: New test. * g++.dg/warn/Wparentheses-19.C: New test. * g++.dg/warn/Wparentheses-20.C: New test. * g++.dg/warn/Wparentheses-21.C: New test. libstdc++-v3/: * include/bits/locale_facets.tcc (num_get<>::_M_extract_float): Add parentheses around && within || to avoid warning. (num_get<>::_M_extract_int): Likewise. (money_get<>::_M_extract): Likewise. (num_get<>::do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&)): Add parentheses around & within | to avoid warning. (num_put<>::do_put(iter_type, ios_base&, char_type, const void*)): Likewise. * include/bits/streambuf_iterator.h (istreambuf_iterator::equal): Add parentheses around && within || to avoid warning. * libsupc++/tinfo.cc (__do_dyncast): Likewise. * src/locale.cc (locale::_S_normalize_category): Likewise. * include/bits/stl_tree.h (_Rb_tree<>::_M_insert_unique): Add braces to avoid ambiguous else warning. * src/strstream.cc (strstreambuf::_M_free): Likewise. * src/tree.cc (_Rb_tree_rebalance_for_erase): Likewise. Added: trunk/gcc/testsuite/g++.dg/warn/Wparentheses-10.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-11.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-12.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-13.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-14.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-15.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-16.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-17.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-18.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-19.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-20.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-21.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-5.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-6.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-7.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-8.C trunk/gcc/testsuite/g++.dg/warn/Wparentheses-9.C Modified: trunk/gcc/ChangeLog trunk/gcc/c-common.c trunk/gcc/c-common.h trunk/gcc/c-typeck.c trunk/gcc/cp/ChangeLog trunk/gcc/cp/cp-tree.h trunk/gcc/cp/parser.c trunk/gcc/cp/pt.c trunk/gcc/cp/typeck.c trunk/gcc/doc/invoke.texi trunk/gcc/testsuite/ChangeLog trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/include/bits/locale_facets.tcc trunk/libstdc++-v3/include/bits/stl_tree.h trunk/libstdc++-v3/include/bits/streambuf_iterator.h trunk/libstdc++-v3/libsupc++/tinfo.cc trunk/libstdc++-v3/src/locale.cc trunk/libstdc++-v3/src/strstream.cc trunk/libstdc++-v3/src/tree.cc
Will be fixed in gcc 4.3.
*** Bug 32270 has been marked as a duplicate of this bug. ***