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

Reply via email to