diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2023-03-02 13:12:45 +0100 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2023-04-18 07:32:07 +0200 |
commit | 027a94b00759ad19a9b8b99b36819b6f60d5560e (patch) | |
tree | 6683763996250c9e138e5d08122ae6afe831e28a | |
parent | d2ee685f6fa922e97908ed998d14def9e01e1e4e (diff) | |
download | gcc-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.h | 21 |
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); } |