HomeFreeBSD

Pull in r283944 from upstream libc++ trunk (by Eric Fiselier):

Description

Pull in r283944 from upstream libc++ trunk (by Eric Fiselier):

Fix std::pair on FreeBSD

Summary:
FreeBSD ships an old ABI for std::pair which requires that it have
non-trivial copy/move constructors. Currently the non-trivial
copy/move is achieved by providing explicit definitions of the
constructors. This is problematic because it means the constructors
don't SFINAE properly. In order to SFINAE copy/move constructors they
have to be explicitly defaulted and hense non-trivial.

This patch attempts to provide SFINAE'ing copy/move constructors for
std::pair while still making them non-trivial. It does this by adding
a base class with a non-trivial copy constructor and then allowing
pair's constructors to be generated by the compiler. This also allows
the constructors to be constexpr.

Reviewers: emaste, theraven, rsmith, dim

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D25389

This should fix building www/chromium 57.0.2987.110 on stable/10 and
stable/9 without having to use -D_LIBCPP_TRIVIAL_PAIR_COPY_CTOR=1 (which
changes the ABI). Direct commit to stable/10 and stable/9, since head
already has libc++ 4.0, which includes this fix.

Details

Provenance
dimAuthored on
Parents
rS315914: Remove buggy adjustment of page tables in db_write_bytes().
Branches
Unknown
Tags
Unknown