[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