public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [COMMITTED] Constify invariant fields of vrange and irange.
@ 2023-04-18  5:33 Aldy Hernandez
  0 siblings, 0 replies; only message in thread
From: Aldy Hernandez @ 2023-04-18  5:33 UTC (permalink / raw)
  To: GCC patches; +Cc: Andrew MacLeod, Aldy Hernandez

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 --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);
 }
 
-- 
2.39.2


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-04-18  5:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-18  5:33 [COMMITTED] Constify invariant fields of vrange and irange Aldy Hernandez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).