The branch main has been updated by arichardson:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=d61c75f634cf52fdef9590601d881f85275eee9a

commit d61c75f634cf52fdef9590601d881f85275eee9a
Author:     Alex Richardson <arichard...@freebsd.org>
AuthorDate: 2025-09-15 22:10:07 +0000
Commit:     Alex Richardson <arichard...@freebsd.org>
CommitDate: 2025-09-15 22:11:08 +0000

    libc++: avoid use of deprecated builtin
    
    This pulls in LLVM commit accfbd4cb327411ad66c0109ba1841482b871967 to
    avoid the use of __libcpp_is_trivially_relocatable.
    This fixes building FreeBSD libc++ with clang HEAD as of today.
    
    Original commit message:
    [libc++] Replace __is_trivially_relocatable by is_trivially_copyable 
(#124970)
    
    The __is_trivially_relocatable builtin has semantics that do not
    correspond to any current or future notion of trivial relocation.
    Furthermore, it currently leads to incorrect optimizations for some
    types on supported compilers:
    - Clang on Windows where types with non-trivial destructors get
      incorrectly optimized
    - AppleClang where types with non-trivial move constructors get
      incorrectly optimized
    
    Until there is an agreed upon and bugfree implementation of what it
    means to be trivially relocatable, it is safer to simply use trivially
    copyable instead. This doesn't leave a lot of types behind and is
    definitely correct.
    
    Reviewed by:    dim
    MFC after:      1 week
    Differential Revision: https://reviews.freebsd.org/D52529
---
 .../libcxx/include/__type_traits/is_trivially_relocatable.h       | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git 
a/contrib/llvm-project/libcxx/include/__type_traits/is_trivially_relocatable.h 
b/contrib/llvm-project/libcxx/include/__type_traits/is_trivially_relocatable.h
index c0871731cc00..9b0e240de55f 100644
--- 
a/contrib/llvm-project/libcxx/include/__type_traits/is_trivially_relocatable.h
+++ 
b/contrib/llvm-project/libcxx/include/__type_traits/is_trivially_relocatable.h
@@ -11,7 +11,6 @@
 
 #include <__config>
 #include <__type_traits/enable_if.h>
-#include <__type_traits/integral_constant.h>
 #include <__type_traits/is_same.h>
 #include <__type_traits/is_trivially_copyable.h>
 
@@ -23,8 +22,11 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 
 // A type is trivially relocatable if a move construct + destroy of the 
original object is equivalent to
 // `memcpy(dst, src, sizeof(T))`.
-
-#if __has_builtin(__is_trivially_relocatable)
+//
+// Note that we don't use the __is_trivially_relocatable Clang builtin right 
now because it does not
+// implement the semantics of any current or future trivial relocation 
proposal and it can lead to
+// incorrect optimizations on some platforms (Windows) and supported compilers 
(AppleClang).
+#if __has_builtin(__is_trivially_relocatable) && 0
 template <class _Tp, class = void>
 struct __libcpp_is_trivially_relocatable : integral_constant<bool, 
__is_trivially_relocatable(_Tp)> {};
 #else

Reply via email to