[PATCH] Remove can_throw_non_call_exceptions special case from operator_div::wi_fold.

Jeff Law jeffreyalaw@gmail.com
Mon Nov 29 14:39:43 GMT 2021



On 11/29/2021 7:00 AM, Aldy Hernandez via Gcc-patches wrote:
> As discussed in the PR.  The code makes no difference, so whatever test
> we added this special case for has been fixed or is being papered over.
> I think we should fix any fall out upstream.
>
> [Unless Andrew can remember why we added this and it still applies.]
>
> Tested on x86-64 Linux.
>
> OK for trunk?
>
> 	PR 103451
>
> gcc/ChangeLog:
>
> 	* range-op.cc (operator_div::wi_fold): Remove
> 	can_throw_non_call_exceptions special case.
>
> gcc/testsuite/ChangeLog:
>
> 	* gcc.dg/pr103451.c: New test.
I'll defer to Andrew, but it seems wrong to me.  The whole point is to 
set the result to varying so that we don't know the result and never 
remove the division which is critical for -fnon-call-exceptions.


> ---
>   gcc/range-op.cc                 |  7 -------
>   gcc/testsuite/gcc.dg/pr103451.c | 17 +++++++++++++++++
>   2 files changed, 17 insertions(+), 7 deletions(-)
>   create mode 100644 gcc/testsuite/gcc.dg/pr103451.c
>
> diff --git a/gcc/range-op.cc b/gcc/range-op.cc
> index bbf2924f815..6fe5f1cb4e0 100644
> --- a/gcc/range-op.cc
> +++ b/gcc/range-op.cc
> @@ -1832,13 +1832,6 @@ operator_div::wi_fold (irange &r, tree type,
>         return;
>       }
>   
> -  // If flag_non_call_exceptions, we must not eliminate a division by zero.
> -  if (cfun->can_throw_non_call_exceptions)
> -    {
> -      r.set_varying (type);
> -      return;
> -    }
> -
>     // If we're definitely dividing by zero, there's nothing to do.
>     if (wi_zero_p (type, divisor_min, divisor_max))
>       {
> diff --git a/gcc/testsuite/gcc.dg/pr103451.c b/gcc/testsuite/gcc.dg/pr103451.c
> new file mode 100644
> index 00000000000..b83646d0b83
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pr103451.c
> @@ -0,0 +1,17 @@
> +// { dg-do compile }
> +// { dg-options "-O2 -w" }
ISTM that what you want to test for is that the division by zero remains 
in the IL for -fnon-call-exceptions.

jeff



More information about the Gcc-patches mailing list