]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR middle-end/38934 (ICE in set_value_range, at tree-vrp.c:398)
authorRichard Guenther <rguenther@suse.de>
Fri, 10 Jul 2009 16:00:13 +0000 (16:00 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 10 Jul 2009 16:00:13 +0000 (16:00 +0000)
2009-07-10  Richard Guenther  <rguenther@suse.de>

Backport from mainline
2009-01-28  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/38934
* tree-vrp.c (extract_range_from_assert): For LE_EXPR and LT_EXPR
set to varying whenever max has TREE_OVERFLOW set, similarly
for GE_EXPR and GT_EXPR and TREE_OVERFLOW min.

* gcc.dg/pr38934.c: New test.

From-SVN: r149486

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr38934.c [new file with mode: 0644]
gcc/tree-vrp.c

index 621f2e268bc5504735eb913f3df5f68dc3cbe76d..921b6c88566c99ca1a4105f9e44ae0ac3ba24f26 100644 (file)
@@ -1,3 +1,13 @@
+2009-07-10  Richard Guenther  <rguenther@suse.de>
+
+       Backport from mainline
+       2009-01-28  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/38934
+       * tree-vrp.c (extract_range_from_assert): For LE_EXPR and LT_EXPR
+       set to varying whenever max has TREE_OVERFLOW set, similarly
+       for GE_EXPR and GT_EXPR and TREE_OVERFLOW min.
+
 2009-07-07  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/40328
index bef72f362331a8032814303519e37174cc4e1647..de50754b7d68f45e5e6a2e1391eb83cac5553a3a 100644 (file)
@@ -1,3 +1,11 @@
+2009-07-10  Richard Guenther  <rguenther@suse.de>
+
+       Backport from mainline
+       2009-01-28  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/38934
+       * gcc.dg/pr38934.c: New test.
+
 2009-07-10  Richard Guenther  <rguenther@suse.de>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.dg/pr38934.c b/gcc/testsuite/gcc.dg/pr38934.c
new file mode 100644 (file)
index 0000000..c05742c
--- /dev/null
@@ -0,0 +1,19 @@
+/* PR middle-end/38934 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -std=gnu99 -w" } */
+
+/* This variable needed only to work around earlier optimizations than VRP.  */
+unsigned char g;
+
+extern void abort ();
+
+void
+f (long long int p)
+{
+  g = 255;
+  if (p >= -9223372036854775808LL - (signed char) g)
+    p = 1;
+
+  if (p)
+    abort ();
+}
index 53f910d97d6563d66489b5d95c8ac3835f7acc2d..185728dfdd3a0d33daa47c5e436a6c9f720dc821 100644 (file)
@@ -1253,7 +1253,7 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
         all should be optimized away above us.  */
       if ((cond_code == LT_EXPR
           && compare_values (max, min) == 0)
-         || is_overflow_infinity (max))
+         || (CONSTANT_CLASS_P (max) && TREE_OVERFLOW (max)))
        set_value_range_to_varying (vr_p);
       else
        {
@@ -1288,7 +1288,7 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
         all should be optimized away above us.  */
       if ((cond_code == GT_EXPR
           && compare_values (min, max) == 0)
-         || is_overflow_infinity (min))
+         || (CONSTANT_CLASS_P (min) && TREE_OVERFLOW (min)))
        set_value_range_to_varying (vr_p);
       else
        {