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