This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: GCC version bikeshedding


On Wed, Aug 06, 2014 at 12:20:04PM +0200, Richard Biener wrote:
> >> 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)

Generally, if you just pass std::string or std::list or & or && or *
to it around, things will be just mangled differently, so worst case you'll
get linker errors or dynamic linker errors.
The problematic case is if you embed std::string or std::list
in your classes and pass that around in between projects compiled with
one compiler and another compiler, in that case it doesn't affect
the mangling, yet is an ABI change nevertheless.
In such cases, one needs to add abi_tag to your structures, and there is
some g++ warning that can suggest you where to add it.
Of course, if you are not using such structures/classes in between packages,
it is just fine not to do anything about that.

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]