On 11/11/2013 06:49 AM, Richard Biener wrote:
On Sat, Nov 9, 2013 at 3:23 PM, Kenneth Zadeck <zad...@naturalbridge.com> wrote:
On 11/08/2013 05:30 AM, Richard Sandiford wrote:
From tree-vrp.c:
@@ -1893,6 +1884,10 @@ vrp_int_const_binop (enum tree_code code
/* If the singed operation wraps then int_const_binop has done
everything we want. */
;
+ /* Signed division of -1/0 overflows and by the time it gets here
+ returns NULL_TREE. */
+ else if (!res)
+ return NULL_TREE;
else if ((TREE_OVERFLOW (res)
&& !TREE_OVERFLOW (val1)
&& !TREE_OVERFLOW (val2))
Why is this case different from trunk? Or is it a bug-fix independent
of wide-int?
the api for division is different for wide-int than it was for double-int.
But this is using a tree API (int_const_binop) that didn't change
(it returned NULL for / 0 previously). So what makes us arrive here
now? (I agree there is a bug in VRP, but it shouldn't manifest itself
only on wide-int)
Richard.
My reading of the code is that is that i changed int_const_binop to
return null_tree for this case.
On the trunk, only rem returns null_tree for divide by 0, on the wide
int branch, both div and rem return null tree.
I know that this is going to bring on a string of questions that i do
not remember the answers to as to why i made that change. but
fold-const.c:int_const_binop_1 now returns null_tree and this is just
fallout from that change.
Kenny
Thanks,
Richard