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:
parent
36ff9dfbbe
commit
1a989b6179
4 changed files with 37 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
18
gcc/testsuite/g++.dg/warn/Wdiv-by-zero-bogus-2.C
Normal file
18
gcc/testsuite/g++.dg/warn/Wdiv-by-zero-bogus-2.C
Normal 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);
|
||||
}
|
Loading…
Add table
Reference in a new issue