[PATCH] D99834: Don't check that std::pair is trivially copyable on FreeBSD

Dimitry Andric via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 6 12:28:01 PDT 2021


dim added inline comments.


================
Comment at: llvm/unittests/Support/TypeTraitsTest.cpp:113
   TrivialityTester<std::function<int()>, false, false>();
+#if !defined(_LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR)
   TrivialityTester<std::pair<int, bool>, true, true>();
----------------
ldionne wrote:
> dim wrote:
> > ldionne wrote:
> > > I'm really not fond of using a libc++ internal macro here. I think we should instead detect that we're on FreeBSD.
> > At the moment in `__config` the part where this macro gets defined is indeed only when `__FreeBSD__` is defined:
> > 
> > ```
> > // Feature macros for disabling pre ABI v1 features. All of these options
> > // are deprecated.
> > #  if defined(__FreeBSD__)
> > #    define _LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR
> > #  endif
> > #endif
> > ```
> > 
> > So this could as well be `#if !defined(__FreeBSD__)`, yes. At some point though we'll have to migrate to libc++ ABI v2 (whenever that comes), so then this check would have to be adjusted too...
> > 
> Then it can be adjusted if you want to move to a different ABI based on some other detection. I'm very very uncomfortable with letting people use implementation details of libc++, that is the source of huge headache for us.
Even though this is all within the llvm project, I get your point. It becomes hard to rename that macro once this gets duplicated somehow. So let's change this test to `#if !defined(__FreeBSD__)` for now.

(That said, it's still an annoying wart in FreeBSD that we have the sort-of-pre-v1 ABI that has the non-trivial pair constructor. However we'd have to keep a compat lib in place if we ever want to change the ABI, so I'd rather wait until the libc++ v2 ABI is mostly finalized. Users of the old ABI can then install a compat libc++.so.1 binary.)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99834/new/

https://reviews.llvm.org/D99834



More information about the llvm-commits mailing list