From: Paolo Carlini Date: Wed, 1 May 2013 19:19:44 +0000 (+0000) Subject: re PR c++/57132 (spurious warning: division by zero [-Wdiv-by-zero] in if (m) res... X-Git-Tag: releases/gcc-4.9.0~6096 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1a989b6179c0a10892785658443e93507dc597ee;p=thirdparty%2Fgcc.git re PR c++/57132 (spurious warning: division by zero [-Wdiv-by-zero] in if (m) res %=m;) /cp 2013-05-01 Paolo Carlini PR c++/57132 * pt.c (tsubst_copy_and_build, MODOP_EXPR): Increase / decrease c_inhibit_evaluation_warnings around build_x_modify_expr call. /testsuite 2013-05-01 Paolo Carlini PR c++/57132 * g++.dg/warn/Wdiv-by-zero-bogus-2.C: New. From-SVN: r198504 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 09f10df31828..e4996fb0492a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-05-01 Paolo Carlini + + PR c++/57132 + * pt.c (tsubst_copy_and_build, MODOP_EXPR): Increase / decrease + c_inhibit_evaluation_warnings around build_x_modify_expr call. + 2013-05-01 Paolo Carlini PR c++/57092 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 57f65b3be0e4..33ab292b9b54 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -13810,7 +13810,11 @@ tsubst_copy_and_build (tree t, case MODOP_EXPR: { - tree r = build_x_modify_expr + tree r; + + ++c_inhibit_evaluation_warnings; + + r = build_x_modify_expr (EXPR_LOCATION (t), RECUR (TREE_OPERAND (t, 0)), TREE_CODE (TREE_OPERAND (t, 1)), @@ -13824,6 +13828,9 @@ tsubst_copy_and_build (tree t, here. */ if (TREE_NO_WARNING (t)) TREE_NO_WARNING (r) = TREE_NO_WARNING (t); + + --c_inhibit_evaluation_warnings; + RETURN (r); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 939d4596b6d7..bce4185ca693 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-05-01 Paolo Carlini + + PR c++/57132 + * g++.dg/warn/Wdiv-by-zero-bogus-2.C: New. + 2013-05-01 Vladimir Makarov PR target/57091 diff --git a/gcc/testsuite/g++.dg/warn/Wdiv-by-zero-bogus-2.C b/gcc/testsuite/g++.dg/warn/Wdiv-by-zero-bogus-2.C new file mode 100644 index 000000000000..b7556eaac30b --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wdiv-by-zero-bogus-2.C @@ -0,0 +1,18 @@ +// PR c++/57132 + +template +struct mod +{ + static unsigned calc(unsigned x) { + unsigned res = a * x; + if (m) + res %= m; + return res; + } +}; + +int main() +{ + mod<3,2>::calc(7); + mod<0,2>::calc(7); +}