From ea6da7f50fe2adc3a09fc10a3f437902c40ebff9 Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Mon, 5 Oct 2020 17:36:13 +0200 Subject: Cleanup legacy_union and legacy intersect in value_range. These are cleanups so that multi-range union/intersect doesn't have to deal with legacy code. Instead, these should be done in legacy mode. gcc/ChangeLog: * value-range.cc (irange::legacy_intersect): Only handle legacy ranges. (irange::legacy_union): Same. (irange::union_): When unioning legacy with non-legacy, first convert to legacy and do everything in legacy mode. (irange::intersect): Same, but for intersect. * range-op.cc (range_tests): Adjust for above changes. --- gcc/range-op.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'gcc/range-op.cc') diff --git a/gcc/range-op.cc b/gcc/range-op.cc index 11e847f..87c6d82 100644 --- a/gcc/range-op.cc +++ b/gcc/range-op.cc @@ -3901,6 +3901,27 @@ range_tests () r0.invert (); ASSERT_TRUE (r0.nonzero_p ()); + // test legacy interaction + // r0 = ~[1,1] + r0 = int_range<1> (UINT (1), UINT (1), VR_ANTI_RANGE); + // r1 = ~[3,3] + r1 = int_range<1> (UINT (3), UINT (3), VR_ANTI_RANGE); + + // vv = [0,0][2,2][4, MAX] + int_range<3> vv = r0; + vv.intersect (r1); + + ASSERT_TRUE (vv.contains_p (UINT (2))); + ASSERT_TRUE (vv.num_pairs () == 3); + + // create r0 as legacy [1,1] + r0 = int_range<1> (UINT (1), UINT (1)); + // And union it with [0,0][2,2][4,MAX] multi range + r0.union_ (vv); + // The result should be [0,2][4,MAX], or ~[3,3] but it must contain 2 + ASSERT_TRUE (r0.contains_p (UINT (2))); + + multi_precision_range_tests (); int_range_max_tests (); operator_tests (); -- cgit v1.1