The bitmask wasn't always being updated, resulting in some less than
perfect masks being stored.:x
* value-range.cc (irange::intersect_bitmask): Always update the
stored mask to reflect the current calculated mask.
irange_bitmask bm = get_bitmask ();
irange_bitmask save = bm;
bm.intersect (r.get_bitmask ());
- if (save == bm)
- return false;
-
+ // Use ths opportunity to make sure mask reflects always reflects the
+ // best mask we have.
m_bitmask = bm;
// Updating m_bitmask may still yield a semantic bitmask (as
// returned by get_bitmask) which is functionally equivalent to what
// we originally had. In which case, there's still no change.
- if (save == get_bitmask ())
+ if (save == bm || save == get_bitmask ())
return false;
if (!set_range_from_bitmask ())