On 03/04/2013 11:31 AM, Jason Merrill wrote:
Our policy on mangling bugs has been that we don't change the mangling
unless users explicitly specify -fabi-version. Over time, this means
that quite a few bugs have been found but continue to accumulate. Most
of these are C++11-specific, which means that as users use C++11 more
frequently, the bugs are more likely to affect code in the wild.
For templates, it also seems to me that mangling changes have very
little negative impact; in most cases the worst that will happen is that
a program ends up with two compatible versions of the same function. And
none of the changes affect libstdc++.so. For non-template code, any
failures will be at link time, making them straightforward to deal with.
The only non-mangling ABI change since version 2 is to argument
promotion of C++11 scoped enums, and since we've been telling people
that they need to rebuild all their C++11 code with every major release
anyway, I don't think that's an obstacle.
So, for GCC 4.9 I would like to propose that we switch the default ABI
version to 0 so that by default we use the most correct mangling. If
people really need backward compatible mangling for some reason they can
specify the flag appropriately.
Seems reasonable. Presumably -Wabi will warn folks if they're doing
something that results in a different mangling?
A wiki page we can link to when questions arise (as they always will)
which includes your rationale above and any hints (such as -Wabi) users
can use to detect problems, -fabi-version= guidance for those who wish
to keep old behaviour, etc would be helpful.
jeff