================ @@ -1826,6 +1827,12 @@ The following type trait primitives are supported by Clang. Those traits marked functionally equivalent to copying the underlying bytes and then dropping the source object on the floor. This is true of trivial types and types which were made trivially relocatable via the ``clang::trivial_abi`` attribute. +* ``__builtin_is_cpp_trivially_relocatable`` (C++): Returns true if an object + is trivially relocatable, as defined by the C++26 standard [meta.unary.prop]. + Note that the caller code should ensure that if the object is polymorphic, + the dynamic type is of the most derived type. ---------------- cor3ntin wrote:
> AFAIK having a type marked [[clang::trivial_abi]] requires it to be trivially > relocatable. It's not exactly the same semantics. In particular, the standard traits allow for polymorphic types, any code that would do a memcpy without checking for that would lead to nasty UB. How special members contribute to relocatability is also different, the standard requires non-deleted assignment. That would also break code or be forever non-conforming and portable. https://github.com/llvm/llvm-project/pull/127636 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits