Function name demangle on clang vs clang++

Hi all,

I’m a LLVM newbie and am working on a LLVM 3.5 code base. The project ( makes use of clang and reads C code. I’m trying to make it read C++ code. When I compile a kernel written in C with clang++, I get the following difference in the IR for a function declaration:

When compiled with clang:
declare void @convolution3d(float*, float*) #1

When compiled with clang++:
declare void @Z13convolution3dPfS(float*, float*) #2

The project breaks if I compile with clang++ because it expects the function name to not have the @_Z13*PfS. Does anyone know how I can get the function name in the IR generated by clang++ to not have the mangled characters? Once again, this is in LLVM 3.5.


Syed Ahmed
PhD Student
Implementation of Computation Group

This is more of a general C and C++ question than one suitable to the LLVM discussion list, I think?

You can modify the source itself - - discusses the extern “C” directive and how it can be used to expose C-linkage functions from C++ translation units (so, if you have a function with C API, but an implementation written in C++, this is how to do that)

clang++ will implicitly force C++ mode for all input. If you really want
to use it to compile C code and not have mangled names, you need to add
the appropiate extern "C" markers.


Thank you David and Joerg!