diff options
author | Zequan Wu <zequanwu@google.com> | 2025-05-28 13:04:24 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-28 16:04:24 -0400 |
commit | 02916a432ca6465e2e45f67be94f1c89c9cd425d (patch) | |
tree | 60ff8ca17dcc87eabb23ae21d1dc1ec90d4eb063 /llvm/unittests/ProfileData/MemProfTest.cpp | |
parent | cb7f4ff03cc20b04360d75f78e2255214a617d5f (diff) | |
download | llvm-02916a432ca6465e2e45f67be94f1c89c9cd425d.zip llvm-02916a432ca6465e2e45f67be94f1c89c9cd425d.tar.gz llvm-02916a432ca6465e2e45f67be94f1c89c9cd425d.tar.bz2 |
[lldb][Formatters] Add --pointer-match-depth option to `type summary add` command. (#138209)
Currently, the type `T`'s summary formatter will be matched for `T`,
`T*`, `T**` and so on. This is unexpected in many data formatters. Such
unhandled cases could cause the data formatter to crash. An example
would be the lldb's built-in data formatter for `std::optional`:
```
$ cat main.cpp
#include <optional>
int main() {
std::optional<int> o_null;
auto po_null = &o_null;
auto ppo_null = &po_null;
auto pppo_null = &ppo_null;
return 0;
}
$ clang++ -g main.cpp && lldb -o "b 8" -o "r" -o "v pppo_null"
[lldb crash]
```
This change adds an options `--pointer-match-depth` to `type summary
add` command to allow users to specify how many layer of pointers can be
dereferenced at most when matching a summary formatter of type `T`, as
Jim suggested
[here](https://github.com/llvm/llvm-project/pull/124048/#issuecomment-2611164133).
By default, this option has value 1 which means summary formatter for
`T` could also be used for `T*` but not `T**` nor beyond. This option is
no-op when `--skip-pointers` is set as well.
I didn't add such option for `type synthetic add`, `type format add`,
`type filter add`, because it useful for those command. Instead, they
all have the pointer match depth of 1. When printing a type `T*`, lldb
never print the children of `T` even if there is a synthetic formatter
registered for `T`.
Diffstat (limited to 'llvm/unittests/ProfileData/MemProfTest.cpp')
0 files changed, 0 insertions, 0 deletions