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))