Commit de90598b4d3 for php.net

commit de90598b4d399702264d2b1e5c0b0c506cc40208
Author: Tim Düsterhus <tim@tideways-gmbh.com>
Date:   Tue May 5 09:12:35 2026 +0200

    zend_types: Remove deprecated `Z_*()` macros (#21946)

    * zend_types: Remove deprecated `Z_COPYABLE()`

    * zend_types: Remove deprecated `Z_OPT_IMMUTABLE()` and `Z_IMMUTABLE()`

diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS
index c0815a781d7..a4297eec587 100644
--- a/UPGRADING.INTERNALS
+++ b/UPGRADING.INTERNALS
@@ -98,6 +98,11 @@ PHP 8.6 INTERNALS UPGRADE NOTES
     the non-throw versions.
   . The XtOffsetOf() alias of C’s offsetof() macro has been removed. Use
     offsetof() directly.
+  . The deprecated Z_COPYABLE(), Z_COPYABLE_P(), Z_OPT_COPYABLE(), and
+    Z_OPT_COPYABLE_P() macros have been removed. Check for IS_ARRAY directly.
+  . The deprecated Z_IMMUTABLE(), Z_IMMUTABLE_P(), Z_OPT_IMMUTABLE(), and
+    Z_OPT_IMMUTABLE_P() macros have been removed. Check for
+    IS_ARRAY && !REFCOUNTED directly.

 ========================
 2. Build system changes
diff --git a/Zend/zend_types.h b/Zend/zend_types.h
index 30d77da6732..cfff3b942c4 100644
--- a/Zend/zend_types.h
+++ b/Zend/zend_types.h
@@ -944,16 +944,6 @@ static zend_always_inline uint32_t zval_gc_info(uint32_t gc_type_info) {
 #define Z_COLLECTABLE(zval)			((Z_TYPE_FLAGS(zval) & IS_TYPE_COLLECTABLE) != 0)
 #define Z_COLLECTABLE_P(zval_p)		Z_COLLECTABLE(*(zval_p))

-/* deprecated: (COPYABLE is the same as IS_ARRAY) */
-#define Z_COPYABLE(zval)			(Z_TYPE(zval) == IS_ARRAY)
-#define Z_COPYABLE_P(zval_p)		Z_COPYABLE(*(zval_p))
-
-/* deprecated: (IMMUTABLE is the same as IS_ARRAY && !REFCOUNTED) */
-#define Z_IMMUTABLE(zval)			(Z_TYPE_INFO(zval) == IS_ARRAY)
-#define Z_IMMUTABLE_P(zval_p)		Z_IMMUTABLE(*(zval_p))
-#define Z_OPT_IMMUTABLE(zval)		Z_IMMUTABLE(zval_p)
-#define Z_OPT_IMMUTABLE_P(zval_p)	Z_IMMUTABLE(*(zval_p))
-
 /* the following Z_OPT_* macros make better code when Z_TYPE_INFO accessed before */
 #define Z_OPT_TYPE(zval)			(Z_TYPE_INFO(zval) & Z_TYPE_MASK)
 #define Z_OPT_TYPE_P(zval_p)		Z_OPT_TYPE(*(zval_p))
@@ -967,10 +957,6 @@ static zend_always_inline uint32_t zval_gc_info(uint32_t gc_type_info) {
 #define Z_OPT_COLLECTABLE(zval)		((Z_TYPE_INFO(zval) & (IS_TYPE_COLLECTABLE << Z_TYPE_FLAGS_SHIFT)) != 0)
 #define Z_OPT_COLLECTABLE_P(zval_p)	Z_OPT_COLLECTABLE(*(zval_p))

-/* deprecated: (COPYABLE is the same as IS_ARRAY) */
-#define Z_OPT_COPYABLE(zval)		(Z_OPT_TYPE(zval) == IS_ARRAY)
-#define Z_OPT_COPYABLE_P(zval_p)	Z_OPT_COPYABLE(*(zval_p))
-
 #define Z_OPT_ISREF(zval)			(Z_OPT_TYPE(zval) == IS_REFERENCE)
 #define Z_OPT_ISREF_P(zval_p)		Z_OPT_ISREF(*(zval_p))