]> gcc.gnu.org Git - gcc.git/commitdiff
The caller to irange::intersect (wide_int, wide_int) must normalize the range.
authorAldy Hernandez <aldyh@redhat.com>
Fri, 30 Jun 2023 18:24:38 +0000 (20:24 +0200)
committerAldy Hernandez <aldyh@redhat.com>
Fri, 7 Jul 2023 07:55:58 +0000 (09:55 +0200)
Per the function comment, the caller to intersect(wide_int, wide_int)
must handle the mask.  This means it must also normalize the range if
anything changed.

gcc/ChangeLog:

* value-range.cc (irange::intersect): Leave normalization to
caller.

gcc/value-range.cc

index 8e5607a7eeb6d00fa337fedfb3f023c948e1c608..fbc0c7a6f821426a2aa879490caba7147a50e300 100644 (file)
@@ -1475,6 +1475,8 @@ irange::intersect (const vrange &v)
        return true;
 
       res |= intersect_bitmask (r);
+      if (res)
+       normalize_kind ();
       return res;
     }
 
@@ -1574,7 +1576,7 @@ irange::intersect (const vrange &v)
 // Multirange intersect for a specified wide_int [lb, ub] range.
 // Return TRUE if intersect changed anything.
 //
-// NOTE: It is the caller's responsibility to intersect the nonzero masks.
+// NOTE: It is the caller's responsibility to intersect the mask.
 
 bool
 irange::intersect (const wide_int& lb, const wide_int& ub)
@@ -1633,7 +1635,8 @@ irange::intersect (const wide_int& lb, const wide_int& ub)
     }
 
   m_kind = VR_RANGE;
-  normalize_kind ();
+  // The caller must normalize and verify the range, as the bitmask
+  // still needs to be handled.
   return true;
 }
 
This page took 0.065197 seconds and 5 git commands to generate.