aboutsummaryrefslogtreecommitdiff
path: root/lldb/unittests/Target/StackFrameRecognizerTest.cpp
diff options
context:
space:
mode:
authorAdrian Vogelsgesang <avogelsgesang@salesforce.com>2024-08-27 19:15:42 +0200
committerGitHub <noreply@github.com>2024-08-27 19:15:42 +0200
commitdd060bdede8edec18ad5ca122e15cc24a821e3fe (patch)
treeab6091e6c0c8781a992e8237d6d7e90131bdef0f /lldb/unittests/Target/StackFrameRecognizerTest.cpp
parent4baf29e81e30e6ebc1da56b9e5c338014961acf9 (diff)
downloadllvm-dd060bdede8edec18ad5ca122e15cc24a821e3fe.zip
llvm-dd060bdede8edec18ad5ca122e15cc24a821e3fe.tar.gz
llvm-dd060bdede8edec18ad5ca122e15cc24a821e3fe.tar.bz2
[lldb] Add frame recognizers for libc++ `std::invoke` (#105695)
With this commit, we also hide the implementation details of `std::invoke`. To do so, the `LibCXXFrameRecognizer` got a couple more regular expressions. The regular expression passed into `AddRecognizer` became problematic, as it was evaluated on the demangled name. Those names also included result types for C++ symbols. For `std::__invoke` the return type is a huge `decltype(...)`, making the regular expresison really hard to write. Instead, I added support to `AddRecognizer` for matching on the demangled names without result type and argument types. By hiding the implementation details of `invoke`, also the back traces for `std::function` become even nicer, because `std::function` is using `__invoke` internally. Co-authored-by: Adrian Prantl <aprantl@apple.com>
Diffstat (limited to 'lldb/unittests/Target/StackFrameRecognizerTest.cpp')
-rw-r--r--lldb/unittests/Target/StackFrameRecognizerTest.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/lldb/unittests/Target/StackFrameRecognizerTest.cpp b/lldb/unittests/Target/StackFrameRecognizerTest.cpp
index 695f091..df4458e 100644
--- a/lldb/unittests/Target/StackFrameRecognizerTest.cpp
+++ b/lldb/unittests/Target/StackFrameRecognizerTest.cpp
@@ -55,7 +55,7 @@ void RegisterDummyStackFrameRecognizer(StackFrameRecognizerManager &manager) {
StackFrameRecognizerSP dummy_recognizer_sp(new DummyStackFrameRecognizer());
manager.AddRecognizer(dummy_recognizer_sp, module_regex_sp, symbol_regex_sp,
- false);
+ Mangled::NamePreference::ePreferDemangled, false);
}
} // namespace
@@ -72,6 +72,7 @@ TEST_F(StackFrameRecognizerTest, NullModuleRegex) {
manager.ForEach([&any_printed](uint32_t recognizer_id, std::string name,
std::string function,
llvm::ArrayRef<ConstString> symbols,
+ Mangled::NamePreference symbol_mangling,
bool regexp) { any_printed = true; });
EXPECT_TRUE(any_printed);