[lldb] Use APSInt's right shift operator in Scalar (#160149)

Right shift operator in `Scalar` didn't check if the value is unsigned
to perform a logical right shift. Use the right shift operator from
`APSInt` that does this check.
This commit is contained in:
Ilia Kuklin
2025-09-23 18:52:58 +05:00
committed by GitHub
parent 3ca59104cf
commit 154e0637c9
2 changed files with 9 additions and 17 deletions

View File

@@ -471,24 +471,10 @@ bool Scalar::ShiftRightLogical(const Scalar &rhs) {
}
Scalar &Scalar::operator>>=(const Scalar &rhs) {
switch (m_type) {
case e_void:
case e_float:
if (m_type == e_int && rhs.m_type == e_int)
m_integer >>= rhs.m_integer.getZExtValue();
else
m_type = e_void;
break;
case e_int:
switch (rhs.m_type) {
case e_void:
case e_float:
m_type = e_void;
break;
case e_int:
m_integer = m_integer.ashr(rhs.m_integer);
break;
}
break;
}
return *this;
}

View File

@@ -118,11 +118,17 @@ TEST(ScalarTest, RightShiftOperator) {
int a = 0x00001000;
int b = 0xFFFFFFFF;
int c = 4;
unsigned d = 0xFFFFFFFF;
unsigned short e = 0xFFFF;
Scalar a_scalar(a);
Scalar b_scalar(b);
Scalar c_scalar(c);
Scalar d_scalar(d);
Scalar e_scalar(e);
ASSERT_EQ(a >> c, a_scalar >> c_scalar);
ASSERT_EQ(b >> c, b_scalar >> c_scalar);
ASSERT_EQ(d >> c, d_scalar >> c_scalar);
ASSERT_EQ(e >> c, e_scalar >> c_scalar);
}
TEST(ScalarTest, GetBytes) {