This is an archive of the discontinued LLVM Phabricator instance.

[lldb] Consult summary provider before printing children of root references
ClosedPublic

Authored by kastiglione on May 30 2023, 1:16 PM.

Details

Summary

When printing the root of a value, if it's a reference its children are unconditionally
printed - in contrast to pointers whose children are only printed if a sufficient
pointer depth is given.

However, the children are printed even when there's a summary provider that says not to.
If a summary provider exists, this change consults it to determine if children should be
printed.

For example, given a variable of type std::string &, this change has the following
effect:

Before:

(lldb) p string_ref
(std::string &) string_ref = "one two three four five six seven eight nine ten": {
  __r_ = {
    std::__1::__compressed_pair_elem<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep, 0, false> = {
      __value_ = {
         = {
          __l = (__data_ = "one two three four five six seven eight nine ten", __size_ = 48, __cap_ = 64, __is_long_ = 1)
          __s = (__data_ = "@\0p\U00000001\0`\0\00\0\0\0\0\0\0\0@", __padding_ = "\x80t<", __size_ = '\0', __is_long_ = '\x01')
          __r = {
            __words ={...}
          }
        }
      }
    }
  }
}

After:

(lldb) p string_ref
(std::string &) string_ref = "one two three four five six seven eight nine ten"

rdar://73248786

Diff Detail

Event Timeline

kastiglione created this revision.May 30 2023, 1:16 PM
Herald added a project: Restricted Project. · View Herald TranscriptMay 30 2023, 1:16 PM
kastiglione requested review of this revision.May 30 2023, 1:16 PM
Herald added a project: Restricted Project. · View Herald TranscriptMay 30 2023, 1:16 PM
Michael137 accepted this revision.May 30 2023, 2:16 PM

makes sense

This revision is now accepted and ready to land.May 30 2023, 2:16 PM