summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2016-09-02 09:25:36 +0000
committerPavel Labath <labath@google.com>2016-09-02 09:25:36 +0000
commit21159ee68171686865d67823e8c61ecb43a302d5 (patch)
tree4d052ebfe57dbbd5723cec0884874fc71fcc1e92
parentb952ece2df20ef7ffc3afed3c1b6f8e7e1ddd01b (diff)
downloadbcm5719-llvm-21159ee68171686865d67823e8c61ecb43a302d5.tar.gz
bcm5719-llvm-21159ee68171686865d67823e8c61ecb43a302d5.zip
Make Scalar::GetValue more consistent
Summary: It seems the original intention of the function was printing signed values in decimal format, and unsigned values in hex (without the leading "0x"). However, signed and unsigned long were exchanged, which lead to amusing test failures in TestMemoryFind.py. Instead of just switching the two, I think we should just print everything in decimal here, as the current behaviour is very confusing (especially when one does not request printing of types). Nothing seems to depend on this behaviour except and we already have a way for the user to request the format he wants when printing values for most commands (which presumably does not go through this function). I also add a unit tests for the function in question. Reviewers: clayborg, granata.enrico Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D24126 llvm-svn: 280476
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py1
-rw-r--r--lldb/source/Core/Scalar.cpp8
-rw-r--r--lldb/unittests/Core/ScalarTest.cpp29
3 files changed, 32 insertions, 6 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py b/lldb/packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
index b81cb7ba541..6cdf5bf48e9 100644
--- a/lldb/packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
@@ -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()
diff --git a/lldb/source/Core/Scalar.cpp b/lldb/source/Core/Scalar.cpp
index d3e9a756504..1a367d03b07 100644
--- a/lldb/source/Core/Scalar.cpp
+++ b/lldb/source/Core/Scalar.cpp
@@ -308,18 +308,16 @@ Scalar::GetValue (Stream *s, bool show_type) const
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());
- 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, true).c_str());
break;
case e_float:
case e_double:
diff --git a/lldb/unittests/Core/ScalarTest.cpp b/lldb/unittests/Core/ScalarTest.cpp
index bf85f8e9623..d7cf6518bfa 100644
--- a/lldb/unittests/Core/ScalarTest.cpp
+++ b/lldb/unittests/Core/ScalarTest.cpp
@@ -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,31 @@ 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("12345", ScalarGetValue<signed int>(12345));
+ EXPECT_EQ("-12345", ScalarGetValue<signed int>(-12345));
+ EXPECT_EQ("12345", ScalarGetValue<unsigned int>(12345));
+
+ EXPECT_EQ("12345678", ScalarGetValue<signed long>(12345678L));
+ EXPECT_EQ("-12345678", ScalarGetValue<signed long>(-12345678L));
+ EXPECT_EQ("12345678", ScalarGetValue<unsigned long>(12345678UL));
+
+ EXPECT_EQ("1234567890123", ScalarGetValue<signed long long>(1234567890123LL));
+ EXPECT_EQ("-1234567890123", ScalarGetValue<signed long long>(-1234567890123LL));
+ EXPECT_EQ("1234567890123", ScalarGetValue<unsigned long long>(1234567890123ULL));
+}
OpenPOWER on IntegriCloud