[COMMITTED] Constify invariant fields of vrange and irange.
Checks
Commit Message
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(-)
@@ -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);
}