From 247de52b1e2f295dd9f47c09e0d5c3e5706ecad6 Mon Sep 17 00:00:00 2001 From: Christophe Bedard Date: Fri, 11 Oct 2019 16:36:18 -0700 Subject: [PATCH 1/2] Add overload of get_symbols as a fallback --- tracetools/include/tracetools/utils.hpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tracetools/include/tracetools/utils.hpp b/tracetools/include/tracetools/utils.hpp index 2e882bc..3149992 100644 --- a/tracetools/include/tracetools/utils.hpp +++ b/tracetools/include/tracetools/utils.hpp @@ -38,4 +38,11 @@ const char * get_symbol(std::function f) return _demangle_symbol(f.target_type().name()); } +// Fallback meant for lambdas with captures +template +const char * get_symbol(L && l) +{ + return _demangle_symbol(typeid(l).name()); +} + #endif // TRACETOOLS__UTILS_HPP_ From 1eff1fb146d32391785c4b4a05f3f9ba57738650 Mon Sep 17 00:00:00 2001 From: Christophe Bedard Date: Fri, 11 Oct 2019 17:10:59 -0700 Subject: [PATCH 2/2] Add test for get_symbol using lambda with capture --- tracetools/test/test_utils.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tracetools/test/test_utils.cpp b/tracetools/test/test_utils.cpp index ab94037..0bba91a 100644 --- a/tracetools/test/test_utils.cpp +++ b/tracetools/test/test_utils.cpp @@ -57,6 +57,25 @@ TEST(TestUtils, valid_symbol_lambda) { "invalid symbol"; } +/* + Testing symbol resolution lambdas with capture. + */ +TEST(TestUtils, valid_symbol_lambda_capture) { + int num = 1; + + auto l = [ = ]() {return num + 1;}; + EXPECT_STREQ( + get_symbol(l), + "TestUtils_valid_symbol_lambda_capture_Test::TestBody()::{lambda()#1}") << + "invalid symbol"; + + auto m = [&](int other_num) {return num + other_num;}; + EXPECT_STREQ( + get_symbol(m), + "TestUtils_valid_symbol_lambda_capture_Test::TestBody()::{lambda(int)#2}") << + "invalid symbol"; +} + /* Testing symbol resolution for std::function object created from std::bind. */