{
/* If they don't overlap, the result is the first range. If the
second range is a subset of the first, we can't describe this as
- a single range unless both ranges end at the same place, in which
- case we can ignore the fact that it's a subset. Otherwise, we go
- from the start of the first range to just before the start of the
- second. */
+ a single range unless both ranges end at the same place. If both
+ ranges also start in the same place, then the result is false.
+ Otherwise, we go from the start of the first range to just before
+ the start of the second. */
if (no_overlap)
in_p = 1, low = low0, high = high0;
else if (subset
&& integer_zerop (range_binop (EQ_EXPR, integer_type_node,
high0, 1, high1, 0)))
return 0;
+ else if (subset
+ && integer_onep (range_binop (EQ_EXPR, integer_type_node,
+ low0, 0, low1, 0)))
+ in_p = 0, low = high = 0;
else
{
in_p = 1, low = low0;