Get the class name of the function

Hey guys,

I’m wondering if there is a way to write an llvm pass to get the class name of the functions. I am not talking about the simple self-written functions like foo::bar(…), but those STL container functions like ZNKSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEclERKS5_S8, demangles as std::less<std::__cxx11::basic_string<char, std::char_traits, std::allocator > >::operator()(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&) const. In this case, the class name should be std::less<std::__cxx11::basic_string<char, std::char_traits, std::allocator > >, and the function name is operator().

I have tried to do this with clang tools, but the template parameters are not expanded and you can get pretty less information, which is not what I am looking for.

PS. This is specifically for C++.

Any help would be appreciated!


I believe LLVM’s demangler (llvm-cxxfilt?) is built on a reusable library that probably provides you with APIs for inspecting the resulting name in some ways like what you want - but I don’t know for sure.