re PR tree-optimization/31345 (ICE in set_value_range, at tree-vrp.c:269)
./: PR tree-optimization/31345 * tree-vrp.c (extract_range_from_binary_expr): Turn ranges like [+INF, +INF(OVF)] into VARYING. testsuite/: PR tree-optimization/31345 * gcc.c-torture/compile/pr31345-1.c: New test. From-SVN: r123237
This commit is contained in:
parent
0d67a675f0
commit
fa6338517f
4 changed files with 45 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
2007-03-26 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
PR tree-optimization/31345
|
||||
* tree-vrp.c (extract_range_from_binary_expr): Turn ranges like
|
||||
[+INF, +INF(OVF)] into VARYING.
|
||||
|
||||
2007-03-26 Zack Weinberg <zackw@panix.com>
|
||||
|
||||
* gengtype-parse.c: New file.
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2007-03-26 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
PR tree-optimization/31345
|
||||
* gcc.c-torture/compile/pr31345-1.c: New test.
|
||||
|
||||
2007-03-26 Brooks Moses <brooks.moses@codesourcery.com>
|
||||
|
||||
* gfortran.dg/func_derived_4.f90: Fix module cleanup.
|
||||
|
|
24
gcc/testsuite/gcc.c-torture/compile/pr31345-1.c
Normal file
24
gcc/testsuite/gcc.c-torture/compile/pr31345-1.c
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* PR tree-optimization/31345
|
||||
This caused a crash in VRP when dealing with overflow infinities. */
|
||||
|
||||
void
|
||||
dpsnaffle (const char *kbuf)
|
||||
{
|
||||
int hash, thash, head[2], off;
|
||||
{
|
||||
int _DP_i;
|
||||
(hash) = 19780211;
|
||||
{
|
||||
(hash) = (hash) + (kbuf)[_DP_i];
|
||||
}
|
||||
(hash) = ((hash) * 43321879) & 0x7FFFFFFF;
|
||||
}
|
||||
while (off != 0)
|
||||
{
|
||||
if (hash > thash) {}
|
||||
else if (hash < thash)
|
||||
{
|
||||
off = head[2];
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1982,10 +1982,18 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
|
|||
return;
|
||||
}
|
||||
|
||||
/* We punt if:
|
||||
1) [-INF, +INF]
|
||||
2) [-INF, +-INF(OVF)]
|
||||
3) [+-INF(OVF), +INF]
|
||||
4) [+-INF(OVF), +-INF(OVF)]
|
||||
We learn nothing when we have INF and INF(OVF) on both sides.
|
||||
Note that we do accept [-INF, -INF] and [+INF, +INF] without
|
||||
overflow. */
|
||||
if ((min == TYPE_MIN_VALUE (TREE_TYPE (min))
|
||||
|| is_negative_overflow_infinity (min))
|
||||
|| is_overflow_infinity (min))
|
||||
&& (max == TYPE_MAX_VALUE (TREE_TYPE (max))
|
||||
|| is_positive_overflow_infinity (max)))
|
||||
|| is_overflow_infinity (max)))
|
||||
{
|
||||
set_value_range_to_varying (vr);
|
||||
return;
|
||||
|
|
Loading…
Add table
Reference in a new issue