[Lldb-commits] [lldb] 154e063 - [lldb] Use APSInt's right shift operator in Scalar (#160149)
via lldb-commits
lldb-commits at lists.llvm.org
Tue Sep 23 06:53:02 PDT 2025
Author: Ilia Kuklin
Date: 2025-09-23T18:52:58+05:00
New Revision: 154e0637c9b60108bda4e73645a3c9b9f62020c4
URL: https://github.com/llvm/llvm-project/commit/154e0637c9b60108bda4e73645a3c9b9f62020c4
DIFF: https://github.com/llvm/llvm-project/commit/154e0637c9b60108bda4e73645a3c9b9f62020c4.diff
LOG: [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.
Added:
Modified:
lldb/source/Utility/Scalar.cpp
lldb/unittests/Utility/ScalarTest.cpp
Removed:
################################################################################
diff --git a/lldb/source/Utility/Scalar.cpp b/lldb/source/Utility/Scalar.cpp
index c8766bdf2aee7..f2c18cdd896da 100644
--- a/lldb/source/Utility/Scalar.cpp
+++ b/lldb/source/Utility/Scalar.cpp
@@ -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;
}
diff --git a/lldb/unittests/Utility/ScalarTest.cpp b/lldb/unittests/Utility/ScalarTest.cpp
index 6d5caef42bee4..869a5809e6d14 100644
--- a/lldb/unittests/Utility/ScalarTest.cpp
+++ b/lldb/unittests/Utility/ScalarTest.cpp
@@ -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) {
More information about the lldb-commits
mailing list