5 Commits

Author SHA1 Message Date
Ayush Sahay
0803241130 [lldb] Enable TestFrameFormatNameWithArgs in case of cross compilation
TestFrameFormatNameWithArgs.test is enabled only in case of native
compilation but is applicable in case of cross compilation too. So,
provision support for enabling it in case of both, native and cross
compilation.

Reviewed By: Michael137

Differential Revision: https://reviews.llvm.org/D140839
2023-02-01 23:05:28 +05:30
Michael Buch
c188910694 [lldb][Test] Make TestFrameFormatNameWithArgs.test more compatible across platforms
On Linux the `std::function` behaved differently to that on Darwin.

This patch removes usage of `std::function` in the test but attempts
to retain the test-coverage. We mainly want function types appearing
in the template argument and function argument lists.

Also add a `char const*` overload to one of the test functions to
cover the "format function argument using ValueObject formatter" code-path.

Differential Revision: https://reviews.llvm.org/D137272
2022-11-03 06:30:14 -07:00
Michael Buch
3e03873e36 [lldb][Test] Fix TestFrameFormatNameWithArgs.test on Windows/Linux
* Windows doesn't support setting these breakpoints by basename
* On Linux std::function arguments aren't formatted as such
2022-10-31 22:59:16 -07:00
Michael Buch
9dd413a1be [lldb][Test] Fix TestFrameFormatNameWithArgs.test on Linux
Be less strict about the `std::` namespace string. Depending
on platform it may contain an inline namespace, e.g., `__1`.
2022-10-31 14:35:37 +00:00
Michael Buch
031096d04d [lldb][CPlusPlus] Implement CPlusPlusLanguage::GetFunctionDisplayName
This patch implements the `GetFunctionDisplayName` API which gets
used by the frame-formatting code to decide how to print a
function name.

Currently this API trivially returns `false`, so we try to parse
the demangled function base-name by hand. We try find the closing
parenthesis by doing a forward scan through the demangled name. However,
for arguments that contain parenthesis (e.g., function pointers)
this would leave garbage in the frame function name.

By re-using the `CPlusPlusLanguage` parser for this we offload the
need to parse function names to a component that knows how to do this
already.

We leave the existing parsing code in `FormatEntity` since it's used
in cases where a language-plugin is not available (and is not
necessarily C++ specific).

**Example**

For following function:
```
int foo(std::function<int(void)> const& func) { return 1; }
```

Before patch:
```
frame #0: 0x000000010000151c a.out`foo(func= Function = bar() )> const&) at sample.cpp:11:49
```

After patch:
```
frame #0: 0x000000010000151c a.out`foo(func= Function = bar() ) at sample.cpp:11:49
```

**Testing**

* Added shell test
2022-10-31 12:25:19 +00:00