mirror of
https://github.com/intel/llvm.git
synced 2026-01-15 12:25:46 +08:00
[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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user