On 7/2/19 5:36 PM, Jeff Law wrote:

I don't see anything inherently concerning here.  I do wonder if there's
any value in having a debugging function in the class that would iterate
over the ranges and check them for proper canonicalization, verify that
VR_{VARYING,UNDEFINED} objects do not have equivalences, etc.  Thoughts?

In patch 01 we have:

diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 594ee9adc17..97046c22ed1 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -86,6 +86,8 @@ value_range_base::set (enum value_range_kind kind, tree min, t
ree max)
 void
 value_range::set_equiv (bitmap equiv)
 {
+  if (undefined_p () || varying_p ())
+    equiv = NULL;

So it shouldn't be possible to attach an equivalence to a VARYING / UNDEFINED range. Plus, we already have a sanity checker:

void
value_range::check ()
{
  value_range_base::check ();
  switch (m_kind)
    {
    case VR_UNDEFINED:
    case VR_VARYING:
      gcc_assert (!m_equiv || bitmap_empty_p (m_equiv));
    default:;
    }
}

We have no methods for altering a range, except for changing equivalences. So it shouldn't be possible to create a non-canonicalized range.

Aldy

Reply via email to