fold-const.c (merge_ranges): If range_successor or range_predecessor fail, just return 0.
./: * fold-const.c (merge_ranges): If range_successor or range_predecessor fail, just return 0. testsuite/: * g++.dg/conversion/enum1.C: New test. From-SVN: r125486
This commit is contained in:
parent
c846e485db
commit
39ac2ffc71
|
@ -1,3 +1,8 @@
|
||||||
|
2007-06-06 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
|
* fold-const.c (merge_ranges): If range_successor or
|
||||||
|
range_predecessor fail, just return 0.
|
||||||
|
|
||||||
2007-06-06 Uros Bizjak <ubizjak@gmail.com>
|
2007-06-06 Uros Bizjak <ubizjak@gmail.com>
|
||||||
|
|
||||||
PR tree-optimization/32216
|
PR tree-optimization/32216
|
||||||
|
|
|
@ -4549,13 +4549,24 @@ merge_ranges (int *pin_p, tree *plow, tree *phigh, int in0_p, tree low0,
|
||||||
{
|
{
|
||||||
low = range_successor (high1);
|
low = range_successor (high1);
|
||||||
high = high0;
|
high = high0;
|
||||||
in_p = (low != 0);
|
in_p = 1;
|
||||||
|
if (low == 0)
|
||||||
|
{
|
||||||
|
/* We are in the weird situation where high0 > high1 but
|
||||||
|
high1 has no successor. Punt. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (! subset || highequal)
|
else if (! subset || highequal)
|
||||||
{
|
{
|
||||||
low = low0;
|
low = low0;
|
||||||
high = range_predecessor (low1);
|
high = range_predecessor (low1);
|
||||||
in_p = (high != 0);
|
in_p = 1;
|
||||||
|
if (high == 0)
|
||||||
|
{
|
||||||
|
/* low0 < low1 but low1 has no predecessor. Punt. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -4575,7 +4586,12 @@ merge_ranges (int *pin_p, tree *plow, tree *phigh, int in0_p, tree low0,
|
||||||
{
|
{
|
||||||
low = range_successor (high0);
|
low = range_successor (high0);
|
||||||
high = high1;
|
high = high1;
|
||||||
in_p = (low != 0);
|
in_p = 1;
|
||||||
|
if (low == 0)
|
||||||
|
{
|
||||||
|
/* high1 > high0 but high0 has no successor. Punt. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2007-06-06 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
|
* g++.dg/conversion/enum1.C: New test.
|
||||||
|
|
||||||
2007-06-06 Uros Bizjak <ubizjak@gmail.com>
|
2007-06-06 Uros Bizjak <ubizjak@gmail.com>
|
||||||
|
|
||||||
PR tree-optimization/32216
|
PR tree-optimization/32216
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
// { dg-do run }
|
||||||
|
// { dg-options "-O2 -finline-functions" }
|
||||||
|
|
||||||
|
enum E { V = 1 };
|
||||||
|
static const E E_MIN = V;
|
||||||
|
static const E E_MAX = V;
|
||||||
|
|
||||||
|
bool valid(E v) { return v >= E_MIN && v <= E_MAX; }
|
||||||
|
|
||||||
|
int main() { return valid(E(2)); }
|
Loading…
Reference in New Issue