diff mbox series

[COMMITTED] Constify invariant fields of vrange and irange.

Message ID 20230418053314.222548-1-aldyh@redhat.com
State New
Headers show
Series [COMMITTED] Constify invariant fields of vrange and irange. | expand

Commit Message

Aldy Hernandez April 18, 2023, 5:33 a.m. UTC
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 | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)
diff mbox series

Patch

diff --git a/gcc/value-range.h b/gcc/value-range.h
index 969b2b68418..e9439bb7d3c 100644
--- a/gcc/value-range.h
+++ b/gcc/value-range.h
@@ -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);
 }