[LLVMdev] How do clang & clang++ choose function names for LLVM IR?

Hans Wennborg hans at chromium.org
Thu Jun 12 09:14:48 PDT 2014


On Wed, Jun 11, 2014 at 1:45 PM, David Glanzman <davidglanzman at yahoo.com> wrote:
> Hello all,
>
> I'm getting started on a project using LLVM's opt tool to do static
> analysis, printing call graphs and such.  When compiling C programs to IR
> (and eventually to call graphs), function names remain the same (main,
> function1, function2 etc.), but when compiling the same program as C++, the
> function names often have cruft added to them (_Z9function1v, _Z9function2v
> etc.) which doesn't make for a very pretty graph.
>
> Why are these extra characters added when going to IR from C++, but not C?

It's called name mangling. See
http://en.wikipedia.org/wiki/Name_mangling#Name_mangling_in_C.2B.2B

> I'm interested in what they're for and if there's anyway to avoid them for
> the sake of making nice graphs.

If you can declare your functions as 'extern "c"', they will not get
mangled. But this won't work for member functions, namespaces, etc.

If you just want nicer names for your graph, you can run the names
through a demangler. For example:

$ echo _Z9function1v | c++filt
function1()


Thanks,
Hans



More information about the llvm-dev mailing list