small = big;
ASSERT_TRUE (small == int_range<1> (INT (21), INT (21), VR_ANTI_RANGE));
+ // Copying a legacy symbolic to an int_range should normalize the
+ // symbolic at copy time.
+ {
+ tree ssa = make_ssa_name (integer_type_node);
+ value_range legacy_range (ssa, INT (25));
+ int_range<2> copy = legacy_range;
+ ASSERT_TRUE (copy == int_range<2> (vrp_val_min (integer_type_node),
+ INT (25)));
+
+ // Test that copying ~[abc_23, abc_23] to a multi-range yields varying.
+ legacy_range = value_range (ssa, ssa, VR_ANTI_RANGE);
+ copy = legacy_range;
+ ASSERT_TRUE (copy.varying_p ());
+ }
+
range3_tests ();
}
else if (src.varying_p ())
set_varying (src.type ());
else if (src.kind () == VR_ANTI_RANGE)
- set (src.min (), src.max (), VR_ANTI_RANGE);
+ {
+ if (src.legacy_mode_p () && !range_has_numeric_bounds_p (&src))
+ set_varying (src.type ());
+ else
+ set (src.min (), src.max (), VR_ANTI_RANGE);
+ }
else if (legacy_mode_p () && src.maybe_anti_range ())
{
int_range<3> tmp (src);
VR_ANTI_RANGE);
}
else
- set (src.min (), src.max (), VR_RANGE);
+ {
+ // If copying legacy to int_range, normalize any symbolics.
+ if (src.legacy_mode_p () && !range_has_numeric_bounds_p (&src))
+ {
+ value_range cst (src);
+ cst.normalize_symbolics ();
+ set (cst.min (), cst.max ());
+ return;
+ }
+ set (src.min (), src.max ());
+ }
}
// Swap min/max if they are out of order. Return TRUE if further