Commit 1a989b61 by Paolo Carlini Committed by Paolo Carlini

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
parent 36ff9dfb
2013-05-01 Paolo Carlini <paolo.carlini@oracle.com> 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 PR c++/57092
* semantics.c (finish_decltype_type): Handle instantiated template * semantics.c (finish_decltype_type): Handle instantiated template
non-type arguments. non-type arguments.
......
...@@ -13810,7 +13810,11 @@ tsubst_copy_and_build (tree t, ...@@ -13810,7 +13810,11 @@ tsubst_copy_and_build (tree t,
case MODOP_EXPR: case MODOP_EXPR:
{ {
tree r = build_x_modify_expr tree r;
++c_inhibit_evaluation_warnings;
r = build_x_modify_expr
(EXPR_LOCATION (t), (EXPR_LOCATION (t),
RECUR (TREE_OPERAND (t, 0)), RECUR (TREE_OPERAND (t, 0)),
TREE_CODE (TREE_OPERAND (t, 1)), TREE_CODE (TREE_OPERAND (t, 1)),
...@@ -13824,6 +13828,9 @@ tsubst_copy_and_build (tree t, ...@@ -13824,6 +13828,9 @@ tsubst_copy_and_build (tree t,
here. */ here. */
if (TREE_NO_WARNING (t)) if (TREE_NO_WARNING (t))
TREE_NO_WARNING (r) = TREE_NO_WARNING (t); TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
--c_inhibit_evaluation_warnings;
RETURN (r); RETURN (r);
} }
......
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> 2013-05-01 Vladimir Makarov <vmakarov@redhat.com>
PR target/57091 PR target/57091
......
// 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);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment