GCC version bikeshedding
Richard Biener
richard.guenther@gmail.com
Wed Aug 6 10:20:00 GMT 2014
On Wed, Aug 6, 2014 at 12:08 PM, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
> On 6 August 2014 10:06, Jakub Jelinek wrote:
>> On Wed, Aug 06, 2014 at 11:04:14AM +0200, Richard Biener wrote:
>>> > - libstdc++ ABI changes (it is a significant user visible change,
>>> > if you rebuild everything, no extra effort is needed, but otherwise
>>> > if you want some C++ code built with older compilers work together
>>> > with code built with newer compilers, it might require source code
>>> > changes (the abi_tag attribute additions where needed and warning
>>> > suggest to put those at), at least that is my current understanding
>>> > of the plans
>>>
>>> But that's only with -std=c++11? Which had no compatibility
>>> guarantees before?
>>
>> No, AFAIK it is also -std=c++98. At least my understanding was that
>> std::list and std::string are going to change ABI (and get new abi_tag)
>> in all C++ modes. Jonathan/Jason/Paolo, is that right?
>
> Correct. We want C++03 code to continue to be able to interoperate
> with C++11 code.
>
> It's an ABI change for all modes (but not a SONAME change because the
> old and new definitions will both be present in the .so).
Ugh. That's going to be a nightmare to support. Is there a configure
switch to change the default ABI used? That is, on a legacy system
can I upgrate to 5.0 and get code that interoperates fine with code
built with 4.8? (including ABI boundaries using the affected classes?
I suspect APIs with std::string passing are _very_ common, not
sure about std::list)
What's the failure mode the user will see when linking against a
4.8 compiled library with a std::string interface using 5.0?
Thanks,
Richard.
More information about the Gcc
mailing list