Paolo Carlini <paolo.carl...@oracle.com> writes: > On 01/30/2012 07:06 PM, Rainer Orth wrote: >> A non-C++ change suddenly causing new C++ functions to be emitted that >> are not present without that change would be a bug on Linux, too! > I should have been more clear: it's *not* a versioning bug on Linux. Maybe
I never claimed that. > what is happening on Solaris is that those functions were inlined, thus not > exported, and now aren't anymore. This kind of unpredictability in the > inlining choices would not be a compiler bug, or at least not an easy > one... Whatever, if that were the case, this *must be avoided*. You couldn't remove an exported interface because the compiler suddently decided to inline it, otherwise the whole versioning business became just a joke. > Not sure why abi_check didn't complain before on Solaris, because the > linker script etc, are meant to export those operators @3.4.5 (and also > @3.4 because of an old mistake). This is what happens on Linux since the > very old 3.4.5 times. That's due to the way gld linker scripts work: every entry there just works like sort of a wildcard: if the symbol is present in the input objects, it is bound to the respective symbol, if it's missing, this is silently ignored. I observe the introduction of those two symbols with both Sun and GNU ld. IMO, this behavior of gld is fundamentally incompatible with stable versions. Sun ld is different: if a symbol is listed in a version, but missing from the input objects, it errors out. As I stated before, abi_check should just flag all additions to released versions as bugs. That would require us to update all the baselines immediately before releases, though, which unfortunately hasn't been done consistently in the past. Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University