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

Adrian Prantl aprantl at apple.com
Mon Feb 17 10:16:47 PST 2014


On Feb 15, 2014, at 17:25, Eric Christopher <echristo at gmail.com> wrote:

> 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.

And regarding the change r154570, the summary of that radar is that there was a mangled name for a static function in the symbol table, but the debugger could not look it up in the DWARF because the mangled name was not mentioned there.

-- adrian



More information about the cfe-dev mailing list