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 --- 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 @@ '(%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, ' + '%s::allocator >) uchar = "aaaaa"'%(ns,ns,ns), + ]) self.runCmd("n") @@ -107,4 +109,8 @@ '(%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, ' + '%s::allocator >) 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 --- 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 @@ std::u16string u16_empty(u""); std::u32string u32_string(U"🍄🍅🍆🍌"); std::u32string u32_empty(U""); + std::basic_string 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 --- 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 @@ 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 --- 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 @@ 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 uchar(5, 'a'); S.assign(L"!!!!!"); // Set break point at this line. return 0; } diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -425,6 +425,13 @@ "std::__[[:alnum:]]+::char_traits, " "std::__[[:alnum:]]+::allocator >$"), stl_summary_flags, true); + AddCXXSummary(cpp_category_sp, + lldb_private::formatters::LibcxxStringSummaryProviderASCII, + "std::string summary provider", + ConstString("^std::__[[:alnum:]]+::basic_string, " + "std::__[[:alnum:]]+::allocator >$"), + stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxStringSummaryProviderUTF16, @@ -723,6 +730,10 @@ ConstString("std::__cxx11::basic_string, " "std::allocator >"), cxx11_string_summary_sp); + cpp_category_sp->GetTypeSummariesContainer()->Add( + ConstString("std::__cxx11::basic_string, " + "std::allocator >"), + cxx11_string_summary_sp); // making sure we force-pick the summary for printing wstring (_M_p is a // wchar_t*)