GCC version bikeshedding

Marc Glisse marc.glisse@inria.fr
Wed Aug 6 10:50:00 GMT 2014


On Wed, 6 Aug 2014, Jakub Jelinek wrote:

> On Wed, Aug 06, 2014 at 12:31:57PM +0200, Richard Biener wrote:
>> Ok, so the problematical case is
>>
>> struct X { std::string s; };
>> void foo (X&);
>
> Yeah.
>
>> then.  OTOH I remember that then mangling of X changes as well?
>
> Only if you add abi_tag attribute to X.

Note that -Wabi-tag can tell you where it is needed.

struct __attribute__((abi_tag("marc"))) X {};
struct Y { X x; };

a.cc:2:8: warning: 'Y' does not have the "marc" abi tag that 'X' (used in 
the type of 'Y::x') has [-Wabi-tag]
  struct Y { X x; };
         ^
a.cc:2:14: note: 'Y::x' declared here
  struct Y { X x; };
               ^
a.cc:1:41: note: 'X' declared here
  struct __attribute__((abi_tag("marc"))) X {};
                                          ^

> I hope the libstdc++ folks will add some macro which will
> include the right abi_tag attribute for the std::list/std::string
> cases, so you'd in the end just add
> #ifndef _GLIBCXX_ABI_TAG_SOMETHING
> #define _GLIBCXX_ABI_TAG_SOMETHING
> #endif
> ...
> struct X _GLIBCXX_ABI_TAG_SOMETHING { std::string s; };
> void foo (X&);
> or similar.

So we only need to patch every project out there...


> A clean .so.7 break would be significantly worse nightmare.  We've been
> there many years ago, e.g. 3.2/3.3 vs. 3.4, there has been significantly
> fewer C++ plugins etc. in packages and it still it was unsolvable.
> With the abi_tag stuff, you have the option to make stuff interoperable
> when mixing compiler, either with no effort at all, or some limited
> effort.  With .so.7, you have no option, nothing will be interoperable.

I disagree that it is worse, but you have more experience, I guess we
will see the results in a few years...

-- 
Marc Glisse



More information about the Gcc mailing list