[cfe-dev] Where do we really need mangled names

Eric Christopher echristo at gmail.com
Sat Feb 15 17:25:55 PST 2014


On Sat, Feb 15, 2014 at 2:57 PM, David Blaikie <dblaikie at gmail.com> wrote:
> So when comparing Clang's debug info strings to GCC's I came across a couple
> of disparities hinging on the inclusion of linkage names on certain
> functions. Here are a few differences:
>
> * Clang includes linkage names on file-local (static or anon namespace)
> functions. GCC does not.
> * Clang does not include the linkage name of member functions of
> function-local classes. GCC does, if the function is
> non-static/non-anonymous namespace and inline (ie: the member function has
> linkonce-odr linkage, not internal linkage)
> * Clang does not include the linkage name for constructors and destructors -
> this may be necessary due to the difference (GCC duplicates, Clang has one
> version call the other) in implementations, but I doubt it. I assume we
> still emit multiple member functions, one to describe each version of the
> ctor/dtor we're emitting.
>
> It looks like at least for the first case, this may've been deliberate (
> http://llvm.org/viewvc/llvm-project?view=revision&revision=154570 which
> doesn't explain why and points to rdar://11079003 which Jim Grosbach told
> didn't have a great deal more context) but I don't have enough context to
> understand why and whether it's just a GCC bug that they don't emit it, or
> something tools should handle better, etc.
>
> So - any thoughts on the disparity and if/why it's necessary?
>

My thought is that it is basically there to assist in lookup of
symbols. I put the earlier patch in because it was seen as useful
there. In general I find that mangled names are helpful on any entity
that we might want to put into a lookup table since we might have a
qualified name that we'd like to look up. I doubt that any
discrepancies here are intentional, but that any time we have a
mangled name we probably want to add it.

-eric



More information about the cfe-dev mailing list