[libcxx-dev] unstable ABI compiler assumptions
James Y Knight via libcxx-dev
libcxx-dev at lists.llvm.org
Wed Jun 26 15:09:59 PDT 2019
I think autodetection of ABI-changing features is a bad idea, no matter in
the stable or unstable ABI.
If libc++ wants to have an ABI which depends on certain new features from
the compiler, that seems fine. But, when that ABI is enabled, trying to use
the library with a compiler missing said feature should cause a compilation
failure, not the silent use of an incompatible ABI.
That goes for both your cross-compiler and cross-language-version (and yes,
we're getting the latter wrong already in the *stable* ABI now -- and
should fix that!)
I also don't like the idea of the unstable ABI being incompatible with GCC.
But, having the unstable ABI require a *new* version of GCC or Clang seems
like a fine idea.
So, concretely, I'd say that it should be fine to require support for
no_unique_address in libc++'s unstable ABI (that's not clang-specific --
and both GCC and Clang have implemented it).
That said, I also wonder -- why must switching to no_unique_address change
the ABI at all? Doesn't the way it was implemented mean that it's actually
layout compatible to switch EBCO uses over to using no_unique_address? It'd
sure be nice if no_unique_address could be used without ABI breakage when
it's supported, even in the stable v1 ABI.
On Mon, Jun 24, 2019, 7:28 PM Richard Smith via libcxx-dev <
libcxx-dev at lists.llvm.org> wrote:
> In https://reviews.llvm.org/D63744 I'm proposing a change to libc++ that
> (unless we add an additional configuration flag) would mean that the
> unstable ABI is not necessarily ABI-compatible with itself across different
> compilers (in particular, one that supports a particular C++ attribute and
> one that does not), nor between C++ language modes that support that
> attribute and those that don't (which in both Clang and GCC is C++98/03
> versus everything else).
> Do we think that's acceptable? Specifically:
> * Do users of the unstable ABI need it to be ABI-compatible across
> compiler versions and across compilers?
> * Do users of the unstable ABI need it to be ABI-compatible across C++
> language modes (in particular, C++98 versus everything else)?
> And (deep breath) would version-locking the unstable ABI to the
> corresponding version of Clang be acceptable?
> libcxx-dev mailing list
> libcxx-dev at lists.llvm.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the libcxx-dev