[Lldb-commits] [PATCH] D112709: [lldb] Fix matchers for char array formatters
Pavel Labath via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Dec 17 01:10:06 PST 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rG11dc235c7dda: [lldb] Fix matchers for char array formatters (authored by labath).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D112709/new/
https://reviews.llvm.org/D112709
Files:
lldb/source/DataFormatters/FormatManager.cpp
lldb/test/API/functionalities/data-formatter/stringprinter/main.cpp
Index: lldb/test/API/functionalities/data-formatter/stringprinter/main.cpp
===================================================================
--- lldb/test/API/functionalities/data-formatter/stringprinter/main.cpp
+++ lldb/test/API/functionalities/data-formatter/stringprinter/main.cpp
@@ -6,6 +6,27 @@
char overflow[4];
};
+#define MAKE_VARS3(c, v, s) \
+ c v s char c##v##s##chararray[] = #c #v #s "char"; \
+ c v s char *c##v##s##charstar = c##v##s##chararray
+#define MAKE_VARS2(c, v) \
+ MAKE_VARS3(c, v, ); \
+ MAKE_VARS3(c, v, signed); \
+ MAKE_VARS3(c, v, unsigned)
+#define MAKE_VARS(c) \
+ MAKE_VARS2(c, ); \
+ MAKE_VARS2(c, volatile)
+
+MAKE_VARS();
+MAKE_VARS(const);
+
+template<typename T>
+struct S {
+ int x = 0;
+};
+S<char[5]> Schar5;
+S<char *> Scharstar;
+
int main (int argc, char const *argv[])
{
A a, b, c;
@@ -15,7 +36,7 @@
memcpy(b.data, "FO\0BAR", 7);
memcpy(c.data, "F\0O\0AR", 7);
std::string stdstring("Hello\t\tWorld\nI am here\t\tto say hello\n"); //%self.addTearDownHook(lambda x: x.runCmd("setting set escape-non-printables true"))
- const char* constcharstar = stdstring.c_str();
+ const char *charwithtabs = stdstring.c_str();
std::string longstring(
"I am a very long string; in fact I am longer than any reasonable length that a string should be; quite long indeed; oh my, so many words; so many letters; this is kind of like writing a poem; except in real life all that is happening"
" is just me producing a very very long set of words; there is text here, text there, text everywhere; it fills me with glee to see so much text; all around me it's just letters, and symbols, and other pleasant drawings that cause me"
@@ -32,15 +53,30 @@
);
const char* longconstcharstar = longstring.c_str();
return 0; //% if self.TraceOn(): self.runCmd('frame variable')
+ //%
//% self.expect_var_path('stdstring', summary='"Hello\\t\\tWorld\\nI am here\\t\\tto say hello\\n"')
- //% self.expect_var_path('constcharstar', summary='"Hello\\t\\tWorld\\nI am here\\t\\tto say hello\\n"')
+ //% self.expect_var_path('charwithtabs', summary='"Hello\\t\\tWorld\\nI am here\\t\\tto say hello\\n"')
//% self.expect_var_path("a.data", summary='"FOOB"')
//% self.expect_var_path("b.data", summary=r'"FO\0B"')
//% self.expect_var_path("c.data", summary=r'"F\0O"')
//%
+ //% for c in ["", "const"]:
+ //% for v in ["", "volatile"]:
+ //% for s in ["", "signed", "unsigned"]:
+ //% summary = '"'+c+v+s+'char"'
+ //% self.expect_var_path(c+v+s+"chararray", summary=summary)
+ //% # These should be printed normally
+ //% self.expect_var_path(c+v+s+"charstar", summary=summary)
+ //% Schar5 = self.expect_var_path("Schar5",
+ //% children=[ValueCheck(name="x", value="0")])
+ //% self.assertIsNone(Schar5.GetSummary())
+ //% Scharstar = self.expect_var_path("Scharstar",
+ //% children=[ValueCheck(name="x", value="0")])
+ //% self.assertIsNone(Scharstar.GetSummary())
+ //%
//% self.runCmd("setting set escape-non-printables false")
//% self.expect_var_path('stdstring', summary='"Hello\t\tWorld\nI am here\t\tto say hello\n"')
- //% self.expect_var_path('constcharstar', summary='"Hello\t\tWorld\nI am here\t\tto say hello\n"')
+ //% self.expect_var_path('charwithtabs', summary='"Hello\t\tWorld\nI am here\t\tto say hello\n"')
//% self.assertTrue(self.frame().FindVariable('longstring').GetSummary().endswith('"...'))
//% self.assertTrue(self.frame().FindVariable('longconstcharstar').GetSummary().endswith('"...'))
// FIXME: make "b.data" and "c.data" work sanely
Index: lldb/source/DataFormatters/FormatManager.cpp
===================================================================
--- lldb/source/DataFormatters/FormatManager.cpp
+++ lldb/source/DataFormatters/FormatManager.cpp
@@ -724,7 +724,7 @@
lldb::TypeSummaryImplSP string_array_format(
new StringSummaryFormat(string_array_flags, "${var%char[]}"));
- RegularExpression any_size_char_arr(llvm::StringRef("char ?\\[[0-9]+\\]"));
+ RegularExpression any_size_char_arr(R"(^((un)?signed )?char ?\[[0-9]+\]$)");
TypeCategoryImpl::SharedPointer sys_category_sp =
GetCategory(m_system_category_name);
@@ -733,6 +733,9 @@
string_format);
sys_category_sp->GetTypeSummariesContainer()->Add(
ConstString("unsigned char *"), string_format);
+ sys_category_sp->GetTypeSummariesContainer()->Add(
+ ConstString("signed char *"), string_format);
+
sys_category_sp->GetRegexTypeSummariesContainer()->Add(
std::move(any_size_char_arr), string_array_format);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D112709.395066.patch
Type: text/x-patch
Size: 5087 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20211217/b870abbf/attachment-0001.bin>
More information about the lldb-commits
mailing list