[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:

> Hi,
>
> 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?
>
> Thanks!
> Richard
> _______________________________________________
> libcxx-dev mailing list
> libcxx-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/libcxx-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/libcxx-dev/attachments/20190626/b781c784/attachment.html>


More information about the libcxx-dev mailing list