On 07/13/2018 03:02 AM, Richard Biener wrote:
On Thu, Jul 12, 2018 at 10:12 AM Aldy Hernandez <al...@redhat.com> wrote:

So besides the general discussion about references/pointers for out parameters
let's stay consistet within related APIs.  This means wide_int_binop should
have a

wide_int
wide_int_binop (enum tree_code, const wide_int &, const wide_int &,
signop, wi::overflow_type *)

signature.  Notice how I elided the out wide_int parameter to be the
return value which means
the function isn't supposed to fail which means gcc_unreachable () for
"unhandled" tree codes.

wide_int_binop was returning failure for:

    case CEIL_DIV_EXPR:
      if (arg2 == 0)
        return false;
      res = wi::div_ceil (arg1, arg2, sign, &overflow);
      break;

    case ROUND_DIV_EXPR:
      if (arg2 == 0)
        return false;
      res = wi::div_round (arg1, arg2, sign, &overflow);
      break;
etc

How do you suggest we indicate success/failure to the caller?

Aldy

It's more like an exceptional state anyway.

The same goes for the poly_int_binop signature.

The already existing wi::accumulate_overflow should probably be re-done as

wi::overflow_type wi::accumulate_overflow (wi::overflow_type,
wi::overflow_type);

Richard.

Thanks for the review!
Aldy

Reply via email to