[libcxx-commits] [libcxx] [libc++] Make std::pair trivially copyable if its members are (PR #89652)
Daniel Kutenin via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Jul 23 08:06:21 PDT 2024
danlark1 wrote:
> Before this patch:
>
> ```
> % cat repro.cc
> #include <utility>
>
> struct OpIndex {
> uint32_t offset_;
> };
>
> using PhiOp = int;
>
> static_assert(
> std::is_trivially_copyable<std::pair<const PhiOp *, const OpIndex>>::value);
> ```
>
> ```
> % clang -c repro.cc -std=c++20 -isystem libcxx/include -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE -I ~/src/chrome/src/buildtools/third_party/libc++/ -nostdinc++
> ```
>
> After this patch:
>
> ```
> % clang -c repro.cc -std=c++20 -isystem libcxx/include -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE -I ~/src/chrome/src/buildtools/third_party/libc++/ -nostdinc++
> repro.cc:9:1: error: static assertion failed due to requirement 'std::is_trivially_copyable<std::pair<const int *, const OpIndex>>::value'
> static_assert(
> ^
> 1 error generated.
> ```
>
> Is this expected?
>
> (The `-I` flag is just to pick up a __config_site and an __assertion_handler. I'm attaching both; they should both be pretty vanilla. GitHub won't let me attach them as-is, so here they are zipped up: [Archive.zip](https://github.com/user-attachments/files/16350710/Archive.zip))
Yes, this is expected. This patch relaxes the condition on std::pair to make it more memcpy'ble.
https://github.com/llvm/llvm-project/pull/89652
More information about the libcxx-commits
mailing list