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


Reply via email to