Index: source/Core/Scalar.cpp =================================================================== --- source/Core/Scalar.cpp +++ source/Core/Scalar.cpp @@ -2787,16 +2787,28 @@ case Scalar::e_slonglong: case Scalar::e_sint128: case Scalar::e_sint256: - m_integer = m_integer.ashr(bit_offset).trunc(bit_size).sext(8 * GetByteSize()); + { + m_integer = m_integer.ashr(bit_offset); + if (m_integer.getBitWidth() > bit_size) + m_integer = m_integer.trunc(bit_size); + if (m_integer.getBitWidth() < bit_size) + m_integer = m_integer.sext(8 * GetByteSize()); return true; + } case Scalar::e_uint: case Scalar::e_ulong: case Scalar::e_ulonglong: case Scalar::e_uint128: case Scalar::e_uint256: - m_integer = m_integer.lshr(bit_offset).trunc(bit_size).zext(8 * GetByteSize()); + { + m_integer = m_integer.lshr(bit_offset); + if (m_integer.getBitWidth() > bit_size) + m_integer = m_integer.trunc(bit_size); + if (m_integer.getBitWidth() < bit_size) + m_integer = m_integer.zext(8 * GetByteSize()); return true; + } } return false; }