]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Constify invariant fields of vrange and irange.
authorAldy Hernandez <aldyh@redhat.com>
Thu, 2 Mar 2023 12:12:45 +0000 (13:12 +0100)
committerAldy Hernandez <aldyh@redhat.com>
Tue, 18 Apr 2023 05:32:07 +0000 (07:32 +0200)
The discriminator in vrange cannot change after construction,
similarly the number of allocated ranges in an irange.  It's best to
make them constant to avoid invalid changes.

gcc/ChangeLog:

* value-range.h (class vrange): Make m_discriminator const.
(class irange): Make m_max_ranges const.  Adjust constructors
accordingly.
(class unsupported_range): Construct vrange appropriately.
(class frange): Same.

gcc/value-range.h

index 969b2b68418439a2c098e77bb28cd01eae3adb6e..e9439bb7d3c2c59a9a8fc7ea10063a8f0b365d15 100644 (file)
@@ -104,8 +104,9 @@ public:
   enum value_range_kind kind () const;         // DEPRECATED
 
 protected:
+  vrange (enum value_range_discriminator d) : m_discriminator (d) { }
   ENUM_BITFIELD(value_range_kind) m_kind : 8;
-  ENUM_BITFIELD(value_range_discriminator) m_discriminator : 4;
+  const ENUM_BITFIELD(value_range_discriminator) m_discriminator : 4;
 };
 
 // An integer range without any storage.
@@ -214,7 +215,7 @@ private:
 
   bool intersect (const wide_int& lb, const wide_int& ub);
   unsigned char m_num_ranges;
-  unsigned char m_max_ranges;
+  const unsigned char m_max_ranges;
   tree m_nonzero_mask;
   tree *m_base;
 };
@@ -257,8 +258,8 @@ class unsupported_range : public vrange
 {
 public:
   unsupported_range ()
+    : vrange (VR_UNKNOWN)
   {
-    m_discriminator = VR_UNKNOWN;
     set_undefined ();
   }
   virtual void set_undefined () final override
@@ -873,10 +874,10 @@ gt_pch_nx (int_range<N> *x, gt_pointer_operator op, void *cookie)
 
 inline
 irange::irange (tree *base, unsigned nranges)
+  : vrange (VR_IRANGE),
+    m_max_ranges (nranges)
 {
-  m_discriminator = VR_IRANGE;
   m_base = base;
-  m_max_ranges = nranges;
   set_undefined ();
 }
 
@@ -1112,22 +1113,22 @@ vrp_val_min (const_tree type)
 
 inline
 frange::frange ()
+  : vrange (VR_FRANGE)
 {
-  m_discriminator = VR_FRANGE;
   set_undefined ();
 }
 
 inline
 frange::frange (const frange &src)
+  : vrange (VR_FRANGE)
 {
-  m_discriminator = VR_FRANGE;
   *this = src;
 }
 
 inline
 frange::frange (tree type)
+  : vrange (VR_FRANGE)
 {
-  m_discriminator = VR_FRANGE;
   set_varying (type);
 }
 
@@ -1137,8 +1138,8 @@ inline
 frange::frange (tree type,
                const REAL_VALUE_TYPE &min, const REAL_VALUE_TYPE &max,
                value_range_kind kind)
+  : vrange (VR_FRANGE)
 {
-  m_discriminator = VR_FRANGE;
   set (type, min, max, kind);
 }
 
@@ -1146,8 +1147,8 @@ frange::frange (tree type,
 
 inline
 frange::frange (tree min, tree max, value_range_kind kind)
+  : vrange (VR_FRANGE)
 {
-  m_discriminator = VR_FRANGE;
   set (min, max, kind);
 }