aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2023-03-02 13:12:45 +0100
committerAldy Hernandez <aldyh@redhat.com>2023-04-18 07:32:07 +0200
commit027a94b00759ad19a9b8b99b36819b6f60d5560e (patch)
tree6683763996250c9e138e5d08122ae6afe831e28a
parentd2ee685f6fa922e97908ed998d14def9e01e1e4e (diff)
downloadgcc-027a94b00759ad19a9b8b99b36819b6f60d5560e.zip
gcc-027a94b00759ad19a9b8b99b36819b6f60d5560e.tar.gz
gcc-027a94b00759ad19a9b8b99b36819b6f60d5560e.tar.bz2
Constify invariant fields of vrange and irange.
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.
-rw-r--r--gcc/value-range.h21
1 files changed, 11 insertions, 10 deletions
diff --git a/gcc/value-range.h b/gcc/value-range.h
index 969b2b6..e9439bb 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);
}