New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[lldb] Fix MaxSummaryLength target property type #72233
Conversation
GetMaximumSizeOfStringSummary() fails to read the target property as it's being fetched as <uint64_t> but defined as SInt64 in TargetProperties.td. Thus it always falls back to the default value. Regression since 6f8b33f
@llvm/pr-subscribers-lldb Author: None (dancing-leaves) ChangesHi, there seems to be a regression since 6f8b33f. 16.0.6:
17.0.4:
Comparison fails here:
Due to the type difference: llvm-project/lldb/source/Target/Target.cpp Line 4611 in 9cb1673
Full diff: https://github.com/llvm/llvm-project/pull/72233.diff 1 Files Affected:
diff --git a/lldb/source/Target/TargetProperties.td b/lldb/source/Target/TargetProperties.td
index 154a6e5919ab0cd..d2fccdb7b9b39c9 100644
--- a/lldb/source/Target/TargetProperties.td
+++ b/lldb/source/Target/TargetProperties.td
@@ -95,7 +95,7 @@ let Definition = "target" in {
def MaxChildrenDepth: Property<"max-children-depth", "UInt64">,
DefaultUnsignedValue<0xFFFFFFFF>,
Desc<"Maximum depth to expand children.">;
- def MaxSummaryLength: Property<"max-string-summary-length", "SInt64">,
+ def MaxSummaryLength: Property<"max-string-summary-length", "UInt64">,
DefaultUnsignedValue<1024>,
Desc<"Maximum number of characters to show when using %s in summary strings.">;
def MaxMemReadSize: Property<"max-memory-read-size", "SInt64">,
|
Thanks for the fix! You'll be shocked (not shocked :) ) to know that there are zero tests for this setting currently. I'll have a look for an obvious place to put that, isn't difficult to test as you've shown. I can't think of any reason to have negative summary lengths, so changing to unsigned doesn't seem like an issue. |
Turns out you can't set a negative value from within lldb at least:
|
If you are comfortable adding and running tests, Otherwise I'd be happy to take this as obvious and I'll add a test case for you. |
@DavidSpickett sure, thanks for the tip on where to add it. Will update the PR with tests. |
@dancing-leaves are you still planning to add tests for this so we can land this? Would be great to get this in |
Merged the PR since we do want this fix ASAP. Will add the tests as a follow-up |
There seems to be a regression since llvm@6f8b33f. `Max String Summary Length` target property is not read properly and the default value (1024) is being used instead. 16.0.6: ``` (lldb) settings set target.max-string-summary-length 16 (lldb) var (std::string) longStdString = "0123456789101112131415161718192021222324252627282930313233343536" (const char *) longCharPointer = 0x000055555556f310 "0123456789101112131415161718192021222324252627282930313233343536" ``` 17.0.4: ``` (lldb) settings set target.max-string-summary-length 16 (lldb) var (std::string) longStdString = "0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377"... (const char *) longCharPointer = 0x000055555556f310 "*same as line above*"... ``` Comparison fails here: https://github.com/llvm/llvm-project/blob/9cb1673fa5d267148ac81ee31b37f1d2f7c0f2b8/lldb/source/Interpreter/OptionValue.cpp#L256 Due to the type difference: https://github.com/llvm/llvm-project/blob/9cb1673fa5d267148ac81ee31b37f1d2f7c0f2b8/lldb/source/Target/Target.cpp#L4611 https://github.com/llvm/llvm-project/blob/9cb1673fa5d267148ac81ee31b37f1d2f7c0f2b8/lldb/source/Target/TargetProperties.td#L98 (cherry picked from commit ee45710)
Added tests in: #77920 |
…h-to-20230725 [lldb] Fix MaxSummaryLength target property type (llvm#72233) There seems to be a regression since llvm@6f8b33f. `Max String Summary Length` target property is not read properly and the default value (1024) is being used instead. 16.0.6: ``` (lldb) settings set target.max-string-summary-length 16 (lldb) var (std::string) longStdString = "0123456789101112131415161718192021222324252627282930313233343536" (const char *) longCharPointer = 0x000055555556f310 "0123456789101112131415161718192021222324252627282930313233343536" ``` 17.0.4: ``` (lldb) settings set target.max-string-summary-length 16 (lldb) var (std::string) longStdString = "0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377"... (const char *) longCharPointer = 0x000055555556f310 "*same as line above*"... ``` Comparison fails here: https://github.com/llvm/llvm-project/blob/9cb1673fa5d267148ac81ee31b37f1d2f7c0f2b8/lldb/source/Interpreter/OptionValue.cpp#L256 Due to the type difference: https://github.com/llvm/llvm-project/blob/9cb1673fa5d267148ac81ee31b37f1d2f7c0f2b8/lldb/source/Target/Target.cpp#L4611 https://github.com/llvm/llvm-project/blob/9cb1673fa5d267148ac81ee31b37f1d2f7c0f2b8/lldb/source/Target/TargetProperties.td#L98 (cherry picked from commit ee45710)
libstdc++ data formatter simply forwards to the `const char *` formatter -- which means it suffers from the same problem/bug as that one.
There seems to be a regression since llvm@6f8b33f. `Max String Summary Length` target property is not read properly and the default value (1024) is being used instead. 16.0.6: ``` (lldb) settings set target.max-string-summary-length 16 (lldb) var (std::string) longStdString = "0123456789101112131415161718192021222324252627282930313233343536" (const char *) longCharPointer = 0x000055555556f310 "0123456789101112131415161718192021222324252627282930313233343536" ``` 17.0.4: ``` (lldb) settings set target.max-string-summary-length 16 (lldb) var (std::string) longStdString = "0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377"... (const char *) longCharPointer = 0x000055555556f310 "*same as line above*"... ``` Comparison fails here: https://github.com/llvm/llvm-project/blob/9cb1673fa5d267148ac81ee31b37f1d2f7c0f2b8/lldb/source/Interpreter/OptionValue.cpp#L256 Due to the type difference: https://github.com/llvm/llvm-project/blob/9cb1673fa5d267148ac81ee31b37f1d2f7c0f2b8/lldb/source/Target/Target.cpp#L4611 https://github.com/llvm/llvm-project/blob/9cb1673fa5d267148ac81ee31b37f1d2f7c0f2b8/lldb/source/Target/TargetProperties.td#L98
…lvm#77920) This adds API tests for the `target.max-string-summary-length`, which was recently fixed in llvm#72233
libstdc++ data formatter simply forwards to the `const char *` formatter -- which means it suffers from the same problem/bug as that one.
Hi, there seems to be a regression since 6f8b33f.
Max String Summary Length
target property is not read properly and the default value (1024) is being used instead.16.0.6:
17.0.4:
Comparison fails here:
llvm-project/lldb/source/Interpreter/OptionValue.cpp
Line 256 in 9cb1673
Due to the type difference:
llvm-project/lldb/source/Target/Target.cpp
Line 4611 in 9cb1673
llvm-project/lldb/source/Target/TargetProperties.td
Line 98 in 9cb1673