re PR tree-optimization/92506 (Wrong code with -fwrapv since r277979)
authorAndrew MacLeod <amacleod@redhat.com>
Thu, 14 Nov 2019 19:02:48 +0000 (19:02 +0000)
committerAndrew Macleod <amacleod@gcc.gnu.org>
Thu, 14 Nov 2019 19:02:48 +0000 (19:02 +0000)
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

gcc/ChangeLog
gcc/range-op.cc

index 4266f6b16556b4665c937ff8dde90f84e5d4a449..9f76c923ad8618c5d96813b0ccaaa72437df8475 100644 (file)
@@ -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
index 4a23cca3dbb10dd29f89b197421d76981919caa7..39c35919dec48629ecb158731287fbb7b9350588 100644 (file)
@@ -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;
     }