On Wed, 6 Aug 2014, Richard Biener wrote:
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.
Yes. And IMO a waste of effort compared to a clean .so.7 break, but
well...
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?
In good cases, a linker error about a missing symbol (different mangling).
In less good cases, a warning at compile-time about using a class marked
with abi_tag in a class not marked with it. In worse cases (passing
through void* for instance), a runtime crash.
And how do libraries with such an API avoid silently changing their
ABI dependent on the compiler used to compile them? That is,
I suppose those need to change their SONAME dependent on
the compiler version used?!
Yes, just like a move to .so.7 would entail.
--
Marc Glisse