./: * 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
+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>
PR tree-optimization/32216
{
low = range_successor (high1);
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)
{
low = low0;
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
return 0;
{
low = range_successor (high0);
high = high1;
- in_p = (low != 0);
+ in_p = 1;
+ if (low == 0)
+ {
+ /* high1 > high0 but high0 has no successor. Punt. */
+ return 0;
+ }
}
}
+2007-06-06 Ian Lance Taylor <iant@google.com>
+
+ * g++.dg/conversion/enum1.C: New test.
+
2007-06-06 Uros Bizjak <ubizjak@gmail.com>
PR tree-optimization/32216
--- /dev/null
+// { 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)); }