From: Aldy Hernandez Date: Thu, 2 Mar 2023 12:12:45 +0000 (+0100) Subject: Constify invariant fields of vrange and irange. X-Git-Tag: basepoints/gcc-15~10123 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=027a94b00759ad19a9b8b99b36819b6f60d5560e;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/value-range.h b/gcc/value-range.h index 969b2b684184..e9439bb7d3c2 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 *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); }