When we know the bounds of the array, print any embedded nuls instead of treating them as terminators. An exception to this rule is made for the nul character at the very end of the string. We don't print that, as otherwise 99% of the strings would end in \0. This way the strings usually come out the same as how the user typed it into the compiler (char foo[] = "with\0nuls"). It also matches how they come out in gdb. This resolves a FIXME left from D111399, and leaves another FIXME for dealing with nul characters in "escape-non-printables=false" mode. In this mode the characters cause the entire summary string to be terminated prematurely. Differential Revision: https://reviews.llvm.org/D111634
49 lines
3.8 KiB
C++
49 lines
3.8 KiB
C++
#include <string>
|
|
#include <cstring>
|
|
|
|
struct A {
|
|
char data[4];
|
|
char overflow[4];
|
|
};
|
|
|
|
int main (int argc, char const *argv[])
|
|
{
|
|
A a, b, c;
|
|
// Deliberately write past the end of data to test that the formatter stops
|
|
// at the end of array.
|
|
memcpy(a.data, "FOOBAR", 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();
|
|
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"
|
|
" a large amount of joy upon visually seeing them with my eyes; well, this is now a lot of letters, but it is still not enough for the purpose of the test I want to test, so maybe I should copy and paste this a few times, you know.."
|
|
" for science, or something"
|
|
"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"
|
|
" a large amount of joy upon visually seeing them with my eyes; well, this is now a lot of letters, but it is still not enough for the purpose of the test I want to test, so maybe I should copy and paste this a few times, you know.."
|
|
" for science, or something"
|
|
"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"
|
|
" a large amount of joy upon visually seeing them with my eyes; well, this is now a lot of letters, but it is still not enough for the purpose of the test I want to test, so maybe I should copy and paste this a few times, you know.."
|
|
" for science, or something"
|
|
);
|
|
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("a.data", summary='"FOOB"')
|
|
//% self.expect_var_path("b.data", summary=r'"FO\0B"')
|
|
//% self.expect_var_path("c.data", summary=r'"F\0O"')
|
|
//%
|
|
//% 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.assertTrue(self.frame().FindVariable('longstring').GetSummary().endswith('"...'))
|
|
//% self.assertTrue(self.frame().FindVariable('longconstcharstar').GetSummary().endswith('"...'))
|
|
// FIXME: make "b.data" and "c.data" work sanely
|
|
}
|
|
|