[Lldb-commits] [PATCH] D72133: Data formatters: Look through array element typedefs

Jaroslav Sevcik via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Tue Jan 7 04:28:15 PST 2020


jarin added a comment.

In D72133#1806822 <https://reviews.llvm.org/D72133#1806822>, @clayborg wrote:

> So as long as the following are true from this patch I am ok:
>
> - if I ask for the array element type of "str" in the test that was added, it should return "MCHAR". We shouldn't be removing any typedefs from the type. The user can call SBType::GetCanonicalType() if they need to (or equivalent with internal APIs)


As discussed before, this works exactly the same way without my patch.

> - If there are no formatters for "MCHAR[]" we can fall back to "char[]".

This works. If there is formatter for MCHAR[], we use that formatter.

Note that if there is formatter for the element type (MCHAR), the command interpreter will not use that one because of the logic in ValueObjectPrinter::ShouldPrintChildren (which only expands children if the summary formatter says it has children or if there is no summary formatter). This might be a CLI usability regression.

> - If there are no formatters for "MMCHAR[]" from my example we fall back to the _first_ array formatter that supports the array of typedefs, or back to the the array of canonical types. Only the first array based formatter should be returned as the desired formatter

This also works. Here is an example:

  (lldb) b df.cc:7
  Breakpoint 1: where = df.out`main + 61 at df.cc:7:3, address = 0x000000000040114d
  (lldb) r
  ...
  (lldb) p m
  (MCHAR [10]) $0 = "m1"
  (lldb) p mm
  (MMCHAR [10]) $1 = "m2"
  (lldb) type summary add --summary-string "-- mchar --" -x "MCHAR \[[0-9]+]"
  (lldb) p m
  (MCHAR [10]) $2 = -- mchar --
  (lldb) p mm
  (MMCHAR [10]) $3 = -- mchar --
  (lldb) type summary add --summary-string "-- mmchar --" -x "MMCHAR \[[0-9]+]"
  (lldb) p m
  (MCHAR [10]) $6 = -- mchar --
  (lldb) p mm
  (MMCHAR [10]) $7 = -- mmchar --

Here is the program:

  typedef char MCHAR;
  typedef MCHAR MMCHAR;
  
  int main() {
    MMCHAR mm[10] = "m2";
    MCHAR m[10] = "m1";
    return 0;  // break here
  }




CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72133/new/

https://reviews.llvm.org/D72133





More information about the lldb-commits mailing list