------- Comment #32 from rguenth at gcc dot gnu dot org 2007-03-28 08:52 ------- There is
/* Refuse to operate on VARYING ranges, ranges of different kinds and symbolic ranges. As an exception, we allow BIT_AND_EXPR because we may be able to derive a useful range even if one of the operands is VR_VARYING or symbolic range. TODO, we may be able to derive anti-ranges in some cases. */ if (code != BIT_AND_EXPR && code != TRUTH_AND_EXPR && code != TRUTH_OR_EXPR && (vr0.type == VR_VARYING || vr1.type == VR_VARYING || vr0.type != vr1.type || symbolic_range_p (&vr0) || symbolic_range_p (&vr1))) { set_value_range_to_varying (vr); return; } which sets the value range to varying if vr0.type != vr1.type, so if vr1.type is not an anti-range, then vr0.type isn't either. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31169