[Lldb-commits] [lldb] r280480 - Reapply "Make Scalar::GetValue more consistent"

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Fri Sep 2 03:58:52 PDT 2016


Author: labath
Date: Fri Sep  2 05:58:52 2016
New Revision: 280480

URL: http://llvm.org/viewvc/llvm-project?rev=280480&view=rev
Log:
Reapply "Make Scalar::GetValue more consistent"

this is a resubmission of r280476. The problem with the original commit was that it was printing
out all numbers as signed, which was wrong for unsigned numbers with the MSB set. Fix that and
add a unit test covering that case.

Modified:
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
    lldb/trunk/source/Core/Scalar.cpp
    lldb/trunk/unittests/Core/ScalarTest.cpp

Modified: lldb/trunk/packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py?rev=280480&r1=280479&r2=280480&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py Fri Sep  2 05:58:52 2016
@@ -23,7 +23,6 @@ class MemoryFindTestCase(TestBase):
         # Find the line number to break inside main().
         self.line = line_number('main.cpp', '// break here')
 
-    @expectedFailureAll(archs=["i386", "arm"])
     def test_memory_find(self):
         """Test the 'memory find' command."""
         self.build()

Modified: lldb/trunk/source/Core/Scalar.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Scalar.cpp?rev=280480&r1=280479&r2=280480&view=diff
==============================================================================
--- lldb/trunk/source/Core/Scalar.cpp (original)
+++ lldb/trunk/source/Core/Scalar.cpp Fri Sep  2 05:58:52 2016
@@ -308,18 +308,18 @@ Scalar::GetValue (Stream *s, bool show_t
     case e_void:
         break;
     case e_sint:
-    case e_ulong:
+    case e_slong:
     case e_slonglong:
     case e_sint128:
     case e_sint256:
-        s->Printf("%s",m_integer.toString(10,true).c_str());
+        s->PutCString(m_integer.toString(10, true).c_str());
         break;
     case e_uint:
-    case e_slong:
+    case e_ulong:
     case e_ulonglong:
     case e_uint128:
     case e_uint256:
-        s->Printf("%s",m_integer.toString(16,false).c_str());
+        s->PutCString(m_integer.toString(10, false).c_str());
         break;
     case e_float:
     case e_double:

Modified: lldb/trunk/unittests/Core/ScalarTest.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Core/ScalarTest.cpp?rev=280480&r1=280479&r2=280480&view=diff
==============================================================================
--- lldb/trunk/unittests/Core/ScalarTest.cpp (original)
+++ lldb/trunk/unittests/Core/ScalarTest.cpp Fri Sep  2 05:58:52 2016
@@ -19,6 +19,7 @@
 #include "lldb/Core/Scalar.h"
 #include "lldb/Core/DataExtractor.h"
 #include "lldb/Host/Endian.h"
+#include "lldb/Core/StreamString.h"
 
 using namespace lldb_private;
 
@@ -103,3 +104,39 @@ TEST(ScalarTest, ExtractBitfield)
     ASSERT_TRUE(u_scalar.ExtractBitfield(len - 4, 4));
     ASSERT_EQ(0, memcmp(&b2, u_scalar.GetBytes(), sizeof(b2)));
 }
+
+template <typename T>
+static std::string
+ScalarGetValue(T value)
+{
+    StreamString stream;
+    Scalar(value).GetValue(&stream, false);
+    return stream.GetString();
+}
+
+TEST(ScalarTest, GetValue)
+{
+    EXPECT_EQ("12345", ScalarGetValue<signed short>(12345));
+    EXPECT_EQ("-12345", ScalarGetValue<signed short>(-12345));
+    EXPECT_EQ("12345", ScalarGetValue<unsigned short>(12345));
+    EXPECT_EQ(std::to_string(std::numeric_limits<unsigned short>::max()),
+              ScalarGetValue(std::numeric_limits<unsigned short>::max()));
+
+    EXPECT_EQ("12345", ScalarGetValue<signed int>(12345));
+    EXPECT_EQ("-12345", ScalarGetValue<signed int>(-12345));
+    EXPECT_EQ("12345", ScalarGetValue<unsigned int>(12345));
+    EXPECT_EQ(std::to_string(std::numeric_limits<unsigned int>::max()),
+              ScalarGetValue(std::numeric_limits<unsigned int>::max()));
+
+    EXPECT_EQ("12345678", ScalarGetValue<signed long>(12345678L));
+    EXPECT_EQ("-12345678", ScalarGetValue<signed long>(-12345678L));
+    EXPECT_EQ("12345678", ScalarGetValue<unsigned long>(12345678UL));
+    EXPECT_EQ(std::to_string(std::numeric_limits<unsigned long>::max()),
+              ScalarGetValue(std::numeric_limits<unsigned long>::max()));
+
+    EXPECT_EQ("1234567890123", ScalarGetValue<signed long long>(1234567890123LL));
+    EXPECT_EQ("-1234567890123", ScalarGetValue<signed long long>(-1234567890123LL));
+    EXPECT_EQ("1234567890123", ScalarGetValue<unsigned long long>(1234567890123ULL));
+    EXPECT_EQ(std::to_string(std::numeric_limits<unsigned long long>::max()),
+              ScalarGetValue(std::numeric_limits<unsigned long long>::max()));
+}




More information about the lldb-commits mailing list