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

David Glanzman davidglanzman at yahoo.com
Thu Jun 12 11:37:17 PDT 2014


Thanks, much appreciated!

-David


On Thu, Jun 12, 2014 at 12:14 PM, Hans Wennborg <hans at chromium.org> wrote:

> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140612/9b82e427/attachment.html>


More information about the llvm-dev mailing list