clang mangling some static struct names?

Dimitry Andric dim at FreeBSD.org
Sun Nov 18 13:37:13 UTC 2012


On 2012-11-16 23:04, Navdeep Parhar wrote:
> On 11/16/12 13:49, Roman Divacky wrote:
>> Yes, it does that. iirc so that you can have things like
>>
>> void foo(int cond) {
>>    if (cond) {
>>      static int i = 7;
>>    } else {
>>      static int i = 8;
>>    }
>> }
>>
>> working correctly.
>
> It's not appending the .n everywhere.  And when it does, I don't see any
> potential collision that it prevented by doing so.  Instead, it looks
> like the .n symbol corresponds to the nth element in the structure (so
> this is not name mangling in the true sense).  I just don't see the
> point in doing things this way.  It is only making things harder for
> debuggers.

I don't think the point is making things harder for debuggers, the point
is optimization.  Since static variables and functions can be optimized
away, or arbitrarily moved around, you cannot count on those symbols
being there at all.


More information about the freebsd-hackers mailing list