[clang] [clang][PAC][NFC] Provide addition support macros to ptrauth.h (PR #161027)

Oliver Hunt via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 20 21:52:23 PDT 2025


================
@@ -199,6 +199,25 @@ typedef __UINTPTR_TYPE__ ptrauth_generic_signature_t;
   ptrauth_auth_and_resign(__value, __old_key, __old_data,                      \
                           ptrauth_key_function_pointer, 0)
 
+/* Cast a value to the given type without changing any signature.
+
+   The type must be a pointer sized type compatible with the __ptrauth
+   qualifier.
+   The value must be an expression with a non-address diversified pointer
+   authentication schema, and will be converted to an rvalue prior to the cast.
+   The result has type given by the first argument.
+
+   The result has an identical bit-pattern to the input pointer. */
+#define ptrauth_nop_cast(__type, __value)                                      \
+  ({                                                                           \
+    union {                                                                    \
+      typeof(*(__value)) *__fptr;                                              \
+      typeof(__type) __opaque;                                                 \
+    } __storage;                                                               \
+    __storage.__fptr = (__value);                                              \
+    __storage.__opaque;                                                        \
----------------
ojhunt wrote:

using memcpy isn't an option as this may be used in environments where they're not available, hence the awkward union

https://github.com/llvm/llvm-project/pull/161027


More information about the cfe-commits mailing list