re PR middle-end/38934 (ICE in set_value_range, at tree-vrp.c:398)
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: r143723
This commit is contained in:
parent
97a170cd63
commit
a9d386a14f
|
@ -1,3 +1,10 @@
|
|||
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-01-28 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/38908
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2009-01-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/38934
|
||||
* gcc.dg/pr38934.c: New test.
|
||||
|
||||
2009-01-28 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/38908
|
||||
|
|
|
@ -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 ();
|
||||
}
|
|
@ -1620,7 +1620,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
|
||||
{
|
||||
|
@ -1655,7 +1655,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
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue