Bug 19564 - -Wparentheses does not work with the C++ front-end
Summary: -Wparentheses does not work with the C++ front-end
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 3.4.4
: P2 enhancement
Target Milestone: 4.3.0
Assignee: Not yet assigned to anyone
URL:
Keywords: diagnostic, patch
: 32270 (view as bug list)
Depends on:
Blocks:
 
Reported: 2005-01-21 13:40 UTC by Frank Mehnert
Modified: 2007-06-10 08:38 UTC (History)
5 users (show)

See Also:
Host: i486-linux
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2005-07-22 04:05:07


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Frank Mehnert 2005-01-21 13:40:30 UTC
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.
Comment 1 Andrew Pinski 2005-01-21 14:11:16 UTC
(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.
Comment 2 Andrew Pinski 2005-01-21 14:12:16 UTC
Note here is the testcase:
int f(int a, int b)
{
    if (a>0 & b>0) /* { dg-warning "" } */
     return 210;
  return 0;

}
Comment 3 Ian Lance Taylor 2006-02-08 17:56:00 UTC
I have a patch to add full support for -Wparentheses to the C++ frontend, which I will submit when copyright status is cleared up.
Comment 4 Dirk Mueller 2006-11-30 23:15:35 UTC
what is the status of these patches? I just started to look into this..
Comment 5 Ian Lance Taylor 2006-12-01 06:18:03 UTC
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.
Comment 6 Ian Lance Taylor 2006-12-12 18:00:35 UTC
Copyright status is cleared, my patch is here:
    http://gcc.gnu.org/ml/gcc-patches/2006-12/msg00868.html
Comment 7 patchapp@dberlin.org 2006-12-12 18:00:46 UTC
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
Comment 8 ian@gcc.gnu.org 2006-12-14 05:49:22 UTC
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

Comment 9 Ian Lance Taylor 2006-12-14 06:03:21 UTC
Will be fixed in gcc 4.3.
Comment 10 Andrew Pinski 2007-06-10 08:38:58 UTC
*** Bug 32270 has been marked as a duplicate of this bug. ***