Skip to content

Commit d198311

Browse files
author
git apple-llvm automerger
committed
Merge commit 'fa462a66e418' from llvm.org/release/21.x into stable/21.x
2 parents 152e01d + fa462a6 commit d198311

File tree

3 files changed

+58
-33
lines changed

3 files changed

+58
-33
lines changed

lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -792,31 +792,27 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
792792
lldb_private::formatters::LibcxxStringSummaryProviderASCII,
793793
"std::string summary provider",
794794
"^std::__[[:alnum:]]+::basic_string<char, "
795-
"std::__[[:alnum:]]+::char_traits<char>, "
796-
"std::__[[:alnum:]]+::allocator<char> >$",
795+
"std::__[[:alnum:]]+::char_traits<char>,.*>$",
797796
stl_summary_flags, true);
798797
AddCXXSummary(cpp_category_sp,
799798
lldb_private::formatters::LibcxxStringSummaryProviderASCII,
800799
"std::string summary provider",
801800
"^std::__[[:alnum:]]+::basic_string<unsigned char, "
802-
"std::__[[:alnum:]]+::char_traits<unsigned char>, "
803-
"std::__[[:alnum:]]+::allocator<unsigned char> >$",
801+
"std::__[[:alnum:]]+::char_traits<unsigned char>,.*>$",
804802
stl_summary_flags, true);
805803

806804
AddCXXSummary(cpp_category_sp,
807805
lldb_private::formatters::LibcxxStringSummaryProviderUTF16,
808806
"std::u16string summary provider",
809807
"^std::__[[:alnum:]]+::basic_string<char16_t, "
810-
"std::__[[:alnum:]]+::char_traits<char16_t>, "
811-
"std::__[[:alnum:]]+::allocator<char16_t> >$",
808+
"std::__[[:alnum:]]+::char_traits<char16_t>,.*>$",
812809
stl_summary_flags, true);
813810

814811
AddCXXSummary(cpp_category_sp,
815812
lldb_private::formatters::LibcxxStringSummaryProviderUTF32,
816813
"std::u32string summary provider",
817814
"^std::__[[:alnum:]]+::basic_string<char32_t, "
818-
"std::__[[:alnum:]]+::char_traits<char32_t>, "
819-
"std::__[[:alnum:]]+::allocator<char32_t> >$",
815+
"std::__[[:alnum:]]+::char_traits<char32_t>,.*>$",
820816
stl_summary_flags, true);
821817

822818
AddCXXSummary(cpp_category_sp,
@@ -827,8 +823,7 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
827823
lldb_private::formatters::LibcxxWStringSummaryProvider,
828824
"std::wstring summary provider",
829825
"^std::__[[:alnum:]]+::basic_string<wchar_t, "
830-
"std::__[[:alnum:]]+::char_traits<wchar_t>, "
831-
"std::__[[:alnum:]]+::allocator<wchar_t> >$",
826+
"std::__[[:alnum:]]+::char_traits<wchar_t>,.*>$",
832827
stl_summary_flags, true);
833828

834829
AddCXXSummary(cpp_category_sp,
@@ -1344,24 +1339,16 @@ static void RegisterStdStringSummaryProvider(
13441339

13451340
category_sp->AddTypeSummary(makeSpecifier(string_ty), summary_sp);
13461341

1347-
// std::basic_string<char>
13481342
category_sp->AddTypeSummary(
13491343
makeSpecifier(llvm::formatv("std::basic_string<{}>", char_ty).str()),
13501344
summary_sp);
1351-
// std::basic_string<char,std::char_traits<char>,std::allocator<char> >
1352-
category_sp->AddTypeSummary(
1353-
makeSpecifier(llvm::formatv("std::basic_string<{0},std::char_traits<{0}>,"
1354-
"std::allocator<{0}> >",
1355-
char_ty)
1356-
.str()),
1357-
summary_sp);
1358-
// std::basic_string<char, std::char_traits<char>, std::allocator<char> >
1345+
13591346
category_sp->AddTypeSummary(
1360-
makeSpecifier(
1361-
llvm::formatv("std::basic_string<{0}, std::char_traits<{0}>, "
1362-
"std::allocator<{0}> >",
1347+
std::make_shared<lldb_private::TypeNameSpecifierImpl>(
1348+
llvm::formatv("^std::basic_string<{0}, ?std::char_traits<{0}>,.*>$",
13631349
char_ty)
1364-
.str()),
1350+
.str(),
1351+
eFormatterMatchRegex),
13651352
summary_sp);
13661353
}
13671354

@@ -1384,20 +1371,17 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
13841371
cpp_category_sp->AddTypeSummary("std::__cxx11::string", eFormatterMatchExact,
13851372
string_summary_sp);
13861373
cpp_category_sp->AddTypeSummary(
1387-
"std::__cxx11::basic_string<char, std::char_traits<char>, "
1388-
"std::allocator<char> >",
1389-
eFormatterMatchExact, string_summary_sp);
1390-
cpp_category_sp->AddTypeSummary("std::__cxx11::basic_string<unsigned char, "
1391-
"std::char_traits<unsigned char>, "
1392-
"std::allocator<unsigned char> >",
1393-
eFormatterMatchExact, string_summary_sp);
1374+
"^std::__cxx11::basic_string<char, std::char_traits<char>,.*>$",
1375+
eFormatterMatchRegex, string_summary_sp);
1376+
cpp_category_sp->AddTypeSummary("^std::__cxx11::basic_string<unsigned char, "
1377+
"std::char_traits<unsigned char>,.*>$",
1378+
eFormatterMatchRegex, string_summary_sp);
13941379

13951380
cpp_category_sp->AddTypeSummary("std::__cxx11::wstring", eFormatterMatchExact,
13961381
string_summary_sp);
13971382
cpp_category_sp->AddTypeSummary(
1398-
"std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, "
1399-
"std::allocator<wchar_t> >",
1400-
eFormatterMatchExact, string_summary_sp);
1383+
"^std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>,.*>$",
1384+
eFormatterMatchRegex, string_summary_sp);
14011385

14021386
SyntheticChildren::Flags stl_synth_flags;
14031387
stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(

lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/string/TestDataFormatterStdString.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ def cleanup():
8080
'(%s::string) Q = "quite a long std::strin with lots of info inside it"'
8181
% ns,
8282
"(%s::string *) null_str = nullptr" % ns,
83+
'(CustomString) custom_str = "hello!"',
84+
'(CustomWString) custom_wstr = L"hello!"',
8385
],
8486
)
8587

@@ -143,6 +145,10 @@ def do_test_multibyte(self):
143145
'(%s::u16string) u16_empty = u""' % ns,
144146
'(%s::u32string) u32_string = U"🍄🍅🍆🍌"' % ns,
145147
'(%s::u32string) u32_empty = U""' % ns,
148+
'(CustomStringU16) custom_u16 = u"ß水氶"',
149+
'(CustomStringU16) custom_u16_empty = u""',
150+
'(CustomStringU32) custom_u32 = U"🍄🍅🍆🍌"',
151+
'(CustomStringU32) custom_u32_empty = U""',
146152
],
147153
)
148154

lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/string/main.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,33 @@
1+
#include <cstdlib>
12
#include <stdint.h>
23
#include <string>
34

5+
template <typename T> struct CustomAlloc {
6+
using value_type = T;
7+
using pointer = value_type *;
8+
using const_pointer = const value_type *;
9+
using size_type = std::size_t;
10+
11+
pointer allocate(size_type n) { return (T *)malloc(n * sizeof(T)); }
12+
13+
void deallocate(pointer p, size_type) {
14+
if (p)
15+
free(p);
16+
}
17+
};
18+
19+
using CustomString =
20+
std::basic_string<char, std::char_traits<char>, CustomAlloc<char>>;
21+
22+
using CustomWString =
23+
std::basic_string<wchar_t, std::char_traits<wchar_t>, CustomAlloc<wchar_t>>;
24+
25+
using CustomStringU16 = std::basic_string<char16_t, std::char_traits<char16_t>,
26+
CustomAlloc<char16_t>>;
27+
28+
using CustomStringU32 = std::basic_string<char32_t, std::char_traits<char32_t>,
29+
CustomAlloc<char32_t>>;
30+
431
size_t touch_string(std::string &in_str) {
532
return in_str.size(); // Break here to look at bad string
633
}
@@ -99,8 +126,16 @@ int main() {
99126
std::string *pq = &q;
100127
std::string *pQ = &Q;
101128

129+
CustomString custom_str("hello!");
130+
CustomWString custom_wstr(L"hello!");
131+
CustomStringU16 custom_u16(u16_string.c_str());
132+
CustomStringU16 custom_u16_empty(u"");
133+
CustomStringU32 custom_u32(u32_string.c_str());
134+
CustomStringU32 custom_u32_empty(U"");
135+
102136
S.assign(L"!!!!!"); // Set break point at this line.
103137
std::string *not_a_string = (std::string *)0x0;
104138
touch_string(*not_a_string);
139+
105140
return 0;
106141
}

0 commit comments

Comments
 (0)