summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test
diff options
context:
space:
mode:
authorJordan Rupprecht <rupprecht@google.com>2019-11-22 10:25:03 -0800
committerJordan Rupprecht <rupprecht@google.com>2019-11-22 10:25:03 -0800
commit506144da04b94d7d492ad34f7d3d81e8368677bb (patch)
treeace042b23006324b6c5fe3fdc251f12dcd22744c /lldb/packages/Python/lldbsuite/test
parent8b40bdbd7edc4cbd6c906911be0329b0900e0486 (diff)
downloadbcm5719-llvm-506144da04b94d7d492ad34f7d3d81e8368677bb.tar.gz
bcm5719-llvm-506144da04b94d7d492ad34f7d3d81e8368677bb.zip
[lldb][DataFormatters] Support pretty printing std::string when built with -funsigned-char.
Summary: When built w/ `-funsigned-char`, `std::string` becomes equivalent to `std::basic_string<unsigned char>`, causing these formatters to not match. This patch adds overloads for both libstdc++ and libc++ string formatters that accepts unsigned char. Motivated by the following example: ``` $ cat pretty_print.cc template <typename T> void print_val(T s) { std::cerr << s << '\n'; // Set a breakpoint here! } int main() { std::string val = "hello"; print_val(val); return 0; } $ clang++ -stdlib=libc++ -funsigned-char -fstandalone-debug -g pretty_print.cc $ lldb ./a.out -b -o 'b pretty_print.cc:6' -o r -o 'fr v' ... (lldb) fr v (std::__1::basic_string<unsigned char, std::__1::char_traits<unsigned char>, std::__1::allocator<unsigned char> >) s = { __r_ = { std::__1::__compressed_pair_elem<std::__1::basic_string<unsigned char, std::__1::char_traits<unsigned char>, std::__1::allocator<unsigned char> >::__rep, 0, false> = { __value_ = { = { __l = (__cap_ = 122511465736202, __size_ = 0, __data_ = 0x0000000000000000) __s = { = (__size_ = '\n', __lx = '\n') __data_ = { [0] = 'h' [1] = 'e' [2] = 'l' [3] = 'l' [4] = 'o' [5] = '\0' ... ``` Reviewers: labath, JDevlieghere, shafik Subscribers: christof, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D70517
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py12
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/main.cpp1
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/string/TestDataFormatterStdString.py28
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/string/main.cpp1
4 files changed, 26 insertions, 16 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py
index f36876ad51a..050d3afceb1 100644
--- a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/TestDataFormatterLibcxxString.py
@@ -74,8 +74,10 @@ class LibcxxStringDataFormatterTestCase(TestBase):
'(%s::u16string) u16_empty = ""'%ns,
'(%s::u32string) u32_string = U"🍄🍅🍆🍌"'%ns,
# FIXME: This should have a 'U' prefix.
- '(%s::u32string) u32_empty = ""'%ns
-])
+ '(%s::u32string) u32_empty = ""'%ns,
+ '(%s::basic_string<unsigned char, %s::char_traits<unsigned char>, '
+ '%s::allocator<unsigned char> >) uchar = "aaaaa"'%(ns,ns,ns),
+ ])
self.runCmd("n")
@@ -107,4 +109,8 @@ class LibcxxStringDataFormatterTestCase(TestBase):
'(%s::string) IHaveEmbeddedZeros = "a\\0b\\0c\\0d"'%ns,
'(%s::wstring) IHaveEmbeddedZerosToo = L"hello world!\\0どざ ăƒ«ă‚œä‹šăƒŸă §æ§Š ăă‚…ăžç‹Šç©€è„© ă˜ă‚ƒéŠ©ăƒȘョ 䀊監"'%ns,
'(%s::u16string) u16_string = u"ĂŸæ°Žæ°¶"'%ns,
- '(%s::u32string) u32_string = U"🍄🍅🍆🍌"'%ns])
+ '(%s::u32string) u32_string = U"🍄🍅🍆🍌"'%ns,
+ '(%s::u32string) u32_empty = ""'%ns,
+ '(%s::basic_string<unsigned char, %s::char_traits<unsigned char>, '
+ '%s::allocator<unsigned char> >) uchar = "aaaaa"'%(ns,ns,ns),
+ ])
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/main.cpp b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/main.cpp
index ec9b8170b2f..afb56e67f0a 100644
--- a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/main.cpp
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/string/main.cpp
@@ -16,6 +16,7 @@ int main()
std::u16string u16_empty(u"");
std::u32string u32_string(U"🍄🍅🍆🍌");
std::u32string u32_empty(U"");
+ std::basic_string<unsigned char> uchar(5, 'a');
S.assign(L"!!!!!"); // Set break point at this line.
return 0;
}
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/string/TestDataFormatterStdString.py b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/string/TestDataFormatterStdString.py
index 0adbaa91d6f..72434faa34f 100644
--- a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/string/TestDataFormatterStdString.py
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/string/TestDataFormatterStdString.py
@@ -59,26 +59,28 @@ class StdStringDataFormatterTestCase(TestBase):
var_empty = self.frame().FindVariable('empty')
var_q = self.frame().FindVariable('q')
var_Q = self.frame().FindVariable('Q')
+ var_uchar = self.frame().FindVariable('uchar')
# TODO: This is currently broken
- # self.assertTrue(var_wempty.GetSummary() == 'L""', "wempty summary wrong")
- self.assertTrue(
- var_s.GetSummary() == 'L"hello world! ŚžŚ–Śœ Ś˜Ś•Ś‘!"',
+ # self.assertEqual(var_wempty.GetSummary(), 'L""', "wempty summary wrong")
+ self.assertEqual(
+ var_s.GetSummary(), 'L"hello world! ŚžŚ–Śœ Ś˜Ś•Ś‘!"',
"s summary wrong")
- self.assertTrue(var_S.GetSummary() == 'L"!!!!"', "S summary wrong")
- self.assertTrue(
- var_mazeltov.GetSummary() == 'L"ŚžŚ–Śœ Ś˜Ś•Ś‘"',
+ self.assertEqual(var_S.GetSummary(), 'L"!!!!"', "S summary wrong")
+ self.assertEqual(
+ var_mazeltov.GetSummary(), 'L"ŚžŚ–Śœ Ś˜Ś•Ś‘"',
"mazeltov summary wrong")
- self.assertTrue(var_empty.GetSummary() == '""', "empty summary wrong")
- self.assertTrue(
- var_q.GetSummary() == '"hello world"',
+ self.assertEqual(var_empty.GetSummary(), '""', "empty summary wrong")
+ self.assertEqual(
+ var_q.GetSummary(), '"hello world"',
"q summary wrong")
- self.assertTrue(
- var_Q.GetSummary() == '"quite a long std::strin with lots of info inside it"',
+ self.assertEqual(
+ var_Q.GetSummary(), '"quite a long std::strin with lots of info inside it"',
"Q summary wrong")
+ self.assertEqual(var_uchar.GetSummary(), '"aaaaa"', "u summary wrong")
self.runCmd("next")
- self.assertTrue(
- var_S.GetSummary() == 'L"!!!!!"',
+ self.assertEqual(
+ var_S.GetSummary(), 'L"!!!!!"',
"new S summary wrong")
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/string/main.cpp b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/string/main.cpp
index 6227a4d493a..73519197d8c 100644
--- a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/string/main.cpp
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/string/main.cpp
@@ -9,6 +9,7 @@ int main()
std::string empty("");
std::string q("hello world");
std::string Q("quite a long std::strin with lots of info inside it");
+ std::basic_string<unsigned char> uchar(5, 'a');
S.assign(L"!!!!!"); // Set break point at this line.
return 0;
}
OpenPOWER on IntegriCloud