This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/78788] [7 Regression] ICE (segfault) on s390x-linux-gnu


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78788

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Index: gcc/tree-vrp.c
===================================================================
--- gcc/tree-vrp.c      (revision 243599)
+++ gcc/tree-vrp.c      (working copy)
@@ -365,10 +365,6 @@ set_value_range (value_range *vr, enum v

       cmp = compare_values (min, max);
       gcc_assert (cmp == 0 || cmp == -1 || cmp == -2);
-
-      if (needs_overflow_infinity (TREE_TYPE (min)))
-       gcc_assert (!is_overflow_infinity (min)
-                   || !is_overflow_infinity (max));
     }

   if (flag_checking
@@ -506,14 +502,9 @@ set_and_canonicalize_value_range (value_
         }
     }

-  /* Drop [-INF(OVF), +INF(OVF)] to varying.  */
-  if (needs_overflow_infinity (TREE_TYPE (min))
-      && is_overflow_infinity (min)
-      && is_overflow_infinity (max))
-    {
-      set_value_range_to_varying (vr);
-      return;
-    }
+  /* Do not drop [-INF(OVF), +INF(OVF)] to varying.  (OVF) has to be sticky
+     to make sure VRP iteration terminates, otherwise we can get into
+     oscillations.  */

   set_value_range (vr, t, min, max, equiv);
 }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]