On Mon, Nov 29, 2021 at 3:39 PM Jeff Law <jeffreya...@gmail.com> wrote: > > > > 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.
But that has nothing to do with computing the value range for the result which is only accessible when the stmt does _not_ throw ... That is, if we compute non-VARYING here and because of that remove the stmt then _that's_ the place to fix (IMO) > > > --- > > 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 >