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