re PR c++/57132 (spurious warning: division by zero [-Wdiv-by-zero] in if (m) res %=m;)

/cp
2013-05-01  Paolo Carlini  <paolo.carlini@oracle.com>

	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  <paolo.carlini@oracle.com>

	PR c++/57132
	* g++.dg/warn/Wdiv-by-zero-bogus-2.C: New.

From-SVN: r198504
This commit is contained in:
Paolo Carlini 2013-05-01 19:19:44 +00:00 committed by Paolo Carlini
parent 36ff9dfbbe
commit 1a989b6179
4 changed files with 37 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2013-05-01 Paolo Carlini <paolo.carlini@oracle.com>
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 <paolo.carlini@oracle.com>
PR c++/57092

View file

@ -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);
}

View file

@ -1,3 +1,8 @@
2013-05-01 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/57132
* g++.dg/warn/Wdiv-by-zero-bogus-2.C: New.
2013-05-01 Vladimir Makarov <vmakarov@redhat.com>
PR target/57091

View file

@ -0,0 +1,18 @@
// PR c++/57132
template<unsigned m, unsigned a>
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);
}