From: Andrew MacLeod Date: Tue, 10 Jun 2025 16:11:18 +0000 (-0400) Subject: Check if constant is a member before returning it. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a4da727020b24b02b062f4bff718c9a5699629c;p=thirdparty%2Fgcc.git Check if constant is a member before returning it. set_range_from_bitmask checks the new bitmask, and if it is a constant, simply returns the constant. It never checks if that constant is actually within the range. If it is not, the result should be UNDEFINED. * value-range.cc (irange::set_range_from_bitmask): When the bitmask result is a singleton, check if it is contained in the range. --- diff --git a/gcc/value-range.cc b/gcc/value-range.cc index ed3760fa6ff..e2d75f59c2e 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -2268,7 +2268,11 @@ irange::set_range_from_bitmask () // If all the bits are known, this is a singleton. if (m_bitmask.mask () == 0) { - set (m_type, m_bitmask.value (), m_bitmask.value ()); + // Make sure the singleton is within the range. + if (contains_p (m_bitmask.value ())) + set (m_type, m_bitmask.value (), m_bitmask.value ()); + else + set_undefined (); return true; }