From a10bf1f989bf224536a92292b55ff915d7dbf272 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Wed, 4 Jan 2012 16:39:53 +0000 Subject: [PATCH] re PR c++/51064 (False Positive for -Wparentheses) /cp 2012-01-04 Paolo Carlini PR c++/51064 * pt.c (tsubst_copy_and_build): Maybe set TREE_NO_WARNING on the tree returned by build_x_binary_op. /testsuite 2012-01-04 Paolo Carlini PR c++/51064 * g++.dg/warn/Wparentheses-26.C: New. From-SVN: r182880 --- gcc/cp/ChangeLog | 6 +++++ gcc/cp/pt.c | 29 ++++++++++++--------- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/g++.dg/warn/Wparentheses-26.C | 26 ++++++++++++++++++ 4 files changed, 54 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/Wparentheses-26.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f4f491debdf..d889d2921ac 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-01-04 Paolo Carlini + + PR c++/51064 + * pt.c (tsubst_copy_and_build): Maybe set TREE_NO_WARNING on + the tree returned by build_x_binary_op. + 2012-01-03 Paolo Carlini PR c++/51738 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 20f67aa6edf..77e3388587b 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -13563,18 +13563,23 @@ tsubst_copy_and_build (tree t, case GT_EXPR: case MEMBER_REF: case DOTSTAR_EXPR: - return build_x_binary_op - (TREE_CODE (t), - RECUR (TREE_OPERAND (t, 0)), - (TREE_NO_WARNING (TREE_OPERAND (t, 0)) - ? ERROR_MARK - : TREE_CODE (TREE_OPERAND (t, 0))), - RECUR (TREE_OPERAND (t, 1)), - (TREE_NO_WARNING (TREE_OPERAND (t, 1)) - ? ERROR_MARK - : TREE_CODE (TREE_OPERAND (t, 1))), - /*overload=*/NULL, - complain); + { + tree r = build_x_binary_op + (TREE_CODE (t), + RECUR (TREE_OPERAND (t, 0)), + (TREE_NO_WARNING (TREE_OPERAND (t, 0)) + ? ERROR_MARK + : TREE_CODE (TREE_OPERAND (t, 0))), + RECUR (TREE_OPERAND (t, 1)), + (TREE_NO_WARNING (TREE_OPERAND (t, 1)) + ? ERROR_MARK + : TREE_CODE (TREE_OPERAND (t, 1))), + /*overload=*/NULL, + complain); + if (EXPR_P (r) && TREE_NO_WARNING (t)) + TREE_NO_WARNING (r) = TREE_NO_WARNING (t); + return r; + } case SCOPE_REF: return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0982a9f3508..373ae014c30 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-04 Paolo Carlini + + PR c++/51064 + * g++.dg/warn/Wparentheses-26.C: New. + 2012-01-04 Mikael Morin * gfortran.dg/elemental_optional_args_2.f90: New test. diff --git a/gcc/testsuite/g++.dg/warn/Wparentheses-26.C b/gcc/testsuite/g++.dg/warn/Wparentheses-26.C new file mode 100644 index 00000000000..6fd441770d9 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wparentheses-26.C @@ -0,0 +1,26 @@ +// PR c++/51064 +// { dg-options "-Wparentheses" } + +template> 3)> class foo1 { }; +typedef foo1<10> bar1; + +template> 3)> class foo2 { }; +typedef foo2<10> bar2; // { dg-warning "suggest parentheses around '\\+'" } + +template> (i + 2))> class foo3 { }; +typedef foo3<3> bar3; + +template> i + 2)> class foo4 { }; +typedef foo4<3> bar4; // { dg-warning "suggest parentheses around '\\+'" } + +template class foo5 { }; +typedef foo5<10> bar5; + +template class foo6 { }; +typedef foo6<10> bar6; // { dg-warning "suggest parentheses around arithmetic" } + +template class foo7 { }; +typedef foo7<10> bar7; + +template class foo8 { }; +typedef foo8<10> bar8; // { dg-warning "suggest parentheses around arithmetic" }