sberg added a comment. In D127593#3598020 <https://reviews.llvm.org/D127593#3598020>, @royjacobson wrote:
> Is it possible to check how often PDFium uses `__has_trivial_assign`? > Depending on how large this breakage is we might need to revert and proceed > more carefully.. The setup is a bit convoluted: I ran into this when building LibreOffice with clang-cl on Windows. LibreOffice builds a bundled PDFium (where it obtained the PDFium source tarball, including PDFium's bundled `third-party/abseil-cpp`, with a recipe documented at https://git.libreoffice.org/core/+/71b952340726190d1f178ef0dadfa89677f2c1dd/external/pdfium/README#6). That PDFium in turn contains a bundled `third-party/abseil-cpp`, whose `absl/meta/type_traits.h` defines an `absl::is_trivially_copy_assignable` struct that is implemented via `__has_trivial_assign`, but then in its implementation also does a `static_assert` to verify that its behavior (based on `__has_trivial_assign`) matches the behavior of std::is_trivially_copy_assignable` (which is based on `__is_trivially_assignable`). And that `static_assert` started to fail now with clang-cl on Windows against the MSVC standard library: In file included from C:/lo-clang/core/workdir/UnpackedTarball/pdfium/core/fxge/win32/cgdi_plus_ext.cpp:19: In file included from C:/lo-clang/core/workdir/UnpackedTarball/pdfium\core/fxcrt/fx_string.h:14: In file included from C:/lo-clang/core/workdir/UnpackedTarball/pdfium\core/fxcrt/bytestring.h:23: In file included from C:/lo-clang/core/workdir/UnpackedTarball/pdfium\core/fxcrt/string_view_template.h:18: In file included from C:/lo-clang/core/workdir/UnpackedTarball/pdfium\third_party/abseil-cpp/absl/types/optional.h:39: In file included from C:/lo-clang/core/workdir/UnpackedTarball/pdfium/third_party/abseil-cpp\absl/utility/utility.h:51: C:/lo-clang/core/workdir/UnpackedTarball/pdfium/third_party/abseil-cpp\absl/meta/type_traits.h(501,3): error: static_assert failed due to requirement 'compliant || std::is_trivially_copy_assignable<std::pair<unsigned long long, unsigned long long>>::value' "Not compliant with std::is_trivially_copy_assignable; Standard: false, Implementation: true" static_assert(compliant || std::is_trivially_copy_assignable<T>::value, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C:/lo-clang/core/workdir/UnpackedTarball/pdfium/third_party/abseil-cpp\absl/types/internal/optional.h(175,21): note: in instantiation of template class 'absl::is_trivially_copy_assignable<std::pair<unsigned long long, unsigned long long>>' requested here absl::is_trivially_copy_assignable<typename std::remove_cv< ^ C:/lo-clang/core/workdir/UnpackedTarball/pdfium\third_party/abseil-cpp/absl/types/optional.h(119,45): note: in instantiation of default argument for 'optional_data<std::pair<unsigned long long, unsigned long long>>' required here class optional : private optional_internal::optional_data<T>, ^~~~~~~~~~~~~~~~ C:/lo-clang/core/workdir/UnpackedTarball/pdfium/core/fxge/win32/cgdi_plus_ext.cpp(384,43): note: in instantiation of template class 'absl::optional<std::pair<unsigned long long, unsigned long long>>' requested here absl::optional<std::pair<size_t, size_t>> IsSmallTriangle( ^ Both the PDFium tarball bundled by LibreOffice, and the `third-party/abseil` in turn bundled in that PDFium tarball, may be a bit dated, but I checked that PDFium's recent main branch https://pdfium.googlesource.com/pdfium/+/2c495300230ed67f87302716c8b262a146ae26af/core/fxge/win32/cgdi_plus_ext.cpp#375 still uses `absl::optional<std::pair<size_t, size_t>>`, and Abseil's recent master branch https://github.com/abseil/abseil-cpp/blob/42f22a28401c952f1fc5942231c7fdac80811bf5/absl/meta/type_traits.h#L264 definition of `absl::is_trivially_copy_assignable` still works as described above. In general, there's still a handful of `__has_trivial_*` calls across Abseil's recent master branch `absl/meta/type_traits.h`. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D127593/new/ https://reviews.llvm.org/D127593 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits