aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2019-11-14 19:02:48 +0000
committerAndrew Macleod <amacleod@gcc.gnu.org>2019-11-14 19:02:48 +0000
commitbbc85eb9cfdfbbd6e81b2a98e3bddc90e0863497 (patch)
tree2563ef051b4610ab65682f36fd1a3b56b8e7f670 /gcc
parentfae08a0507beef27fba062422451020299f27984 (diff)
downloadgcc-bbc85eb9cfdfbbd6e81b2a98e3bddc90e0863497.zip
gcc-bbc85eb9cfdfbbd6e81b2a98e3bddc90e0863497.tar.gz
gcc-bbc85eb9cfdfbbd6e81b2a98e3bddc90e0863497.tar.bz2
re PR tree-optimization/92506 (Wrong code with -fwrapv since r277979)
2019-11-14 Andrew MacLeod <amacleod@redhat.com> PR tree-optimization/92506 * range-op.cc (range_operator::fold_range): Start with range undefined. (operator_abs::wi_fold): Fix wrong line copy... With wrapv, abs with overflow is varying. From-SVN: r278259
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/range-op.cc3
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4266f6b..9f76c92 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-11-14 Andrew MacLeod <amacleod@redhat.com>
+
+ PR tree-optimization/92506
+ * range-op.cc (range_operator::fold_range): Start with range undefined.
+ (operator_abs::wi_fold): Fix wrong line copy... With wrapv, abs with
+ overflow is varying.
+
2019-11-14 Aldy Hernandez <aldyh@redhat.com>
* range-op.cc (*operator*::*range): Remove calls to
diff --git a/gcc/range-op.cc b/gcc/range-op.cc
index 4a23cca..39c3591 100644
--- a/gcc/range-op.cc
+++ b/gcc/range-op.cc
@@ -146,6 +146,7 @@ range_operator::fold_range (value_range &r, tree type,
return;
value_range tmp;
+ r.set_undefined ();
for (unsigned x = 0; x < lh.num_pairs (); ++x)
for (unsigned y = 0; y < rh.num_pairs (); ++y)
{
@@ -2370,7 +2371,7 @@ operator_abs::wi_fold (value_range &r, tree type,
wide_int max_value = wi::max_value (prec, sign);
if (!TYPE_OVERFLOW_UNDEFINED (type) && wi::eq_p (lh_lb, min_value))
{
- r = value_range (type, lh_lb, lh_ub);
+ r = value_range (type);
return;
}