Another thing I noticed is that verifying a range outside of private constraints was actually quite difficult.

Most range classes had a verify_range () routine, but they were private, not constant, and impossible to invoke if we were in a situation where all we had a was a vrange.

This patch promotes verify_range () to a public call in vrange, makes it virtual, provides a hook in value-range, and ensure it just works everywhere.   There is no current need for the call, but it sure would have been handy earlier in the week.  Lets just make it consistent across all range classes.

 Bootstraps on x86_64-pc-linux-gnu  with no regressions. Pushed.

Andrew
From 8213212eba1cad976823716c0c4ba835c842d0b2 Mon Sep 17 00:00:00 2001
From: Andrew MacLeod <amacl...@redhat.com>
Date: Thu, 19 Jun 2025 21:19:27 -0400
Subject: [PATCH 2/3] Promote verify_range to vrange.

most range classes had a verufy_range, but it was all private. Make it a
supported routine from vrange.

	* value-range.cc (frange::verify_range): Constify.
	(irange::verify_range): Constify.
	* value-range.h (vrange::verify_range): New.
	(irange::verify_range): Make public.
	(prange::verify_range): Make public.
	(prange::verify_range): Make public.
	(value_range::verify_range): New.
---
 gcc/value-range.cc | 4 ++--
 gcc/value-range.h  | 9 +++++----
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index 85c1e26287e..dc6909e77c5 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -1205,7 +1205,7 @@ frange::supports_type_p (const_tree type) const
 }
 
 void
-frange::verify_range ()
+frange::verify_range () const
 {
   if (!undefined_p ())
     gcc_checking_assert (HONOR_NANS (m_type) || !maybe_isnan ());
@@ -1515,7 +1515,7 @@ irange::set (tree min, tree max, value_range_kind kind)
 // Check the validity of the range.
 
 void
-irange::verify_range ()
+irange::verify_range () const
 {
   gcc_checking_assert (m_discriminator == VR_IRANGE);
   if (m_kind == VR_UNDEFINED)
diff --git a/gcc/value-range.h b/gcc/value-range.h
index c32c5076b63..5c358f3c70c 100644
--- a/gcc/value-range.h
+++ b/gcc/value-range.h
@@ -111,6 +111,7 @@ public:
   bool operator== (const vrange &) const;
   bool operator!= (const vrange &r) const { return !(*this == r); }
   void dump (FILE *) const;
+  virtual void verify_range () const { }
 protected:
   vrange (enum value_range_discriminator d) : m_discriminator (d) { }
   ENUM_BITFIELD(value_range_kind) m_kind : 8;
@@ -323,6 +324,7 @@ public:
   virtual void update_bitmask (const class irange_bitmask &) override;
   virtual irange_bitmask get_bitmask () const override;
 
+  virtual void verify_range () const;
 protected:
   void maybe_resize (int needed);
   virtual void set (tree, tree, value_range_kind = VR_RANGE) override;
@@ -335,7 +337,6 @@ protected:
 
   void normalize_kind ();
 
-  void verify_range ();
 
   // Hard limit on max ranges allowed.
   static const int HARD_MAX_RANGES = 255;
@@ -421,7 +422,7 @@ public:
   bool contains_p (const wide_int &) const;
   wide_int lower_bound () const;
   wide_int upper_bound () const;
-  void verify_range () const;
+  virtual void verify_range () const;
   irange_bitmask get_bitmask () const final override;
   void update_bitmask (const irange_bitmask &) final override;
 protected:
@@ -593,14 +594,13 @@ public:
   bool nan_signbit_p (bool &signbit) const;
   bool known_isnormal () const;
   bool known_isdenormal_or_zero () const;
-
+  virtual void verify_range () const;
 protected:
   virtual bool contains_p (tree cst) const override;
   virtual void set (tree, tree, value_range_kind = VR_RANGE) override;
 
 private:
   bool internal_singleton_p (REAL_VALUE_TYPE * = NULL) const;
-  void verify_range ();
   bool normalize_kind ();
   bool union_nans (const frange &);
   bool intersect_nans (const frange &);
@@ -798,6 +798,7 @@ public:
   void update_bitmask (const class irange_bitmask &bm)
   { return m_vrange->update_bitmask (bm); }
   void accept (const vrange_visitor &v) const { m_vrange->accept (v); }
+  void verify_range () const { m_vrange->verify_range (); }
 private:
   void init (tree type);
   void init (const vrange &);
-- 
2.45.0

Reply via email to