Commit c5e45a17674 for php
commit c5e45a17674bb2b34e308a2ecfff6e8462a601c7
Author: Tim Düsterhus <tim@tideways-gmbh.com>
Date: Fri Sep 25 12:21:01 2026 +0200
tree-wide: Replace `ZEND_STATIC_ASSERT()` by `static_assert()` (#21228)
* tree-wide: Replace `ZEND_STATIC_ASSERT()` by `static_assert()`
* zend_portability: Remove `ZEND_STATIC_ASSERT()`
diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS
index 57e1ab63be8..4b5eed39a7b 100644
--- a/UPGRADING.INTERNALS
+++ b/UPGRADING.INTERNALS
@@ -16,6 +16,7 @@ PHP 8.7 INTERNALS UPGRADE NOTES
- Removed zend_execute_scripts(). Manually call zend_execute_script() in a loop
instead.
+- Removed ZEND_STATIC_ASSERT(). Use C11 static_assert() directly instead.
========================
2. Build system changes
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index bad60a5f107..8d65f1e9139 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -5944,7 +5944,7 @@ static void zend_compile_static_var_common(zend_string *var_name, zval *value, u
opline->op1_type = IS_CV;
opline->op1.var = lookup_cv(var_name);
- ZEND_STATIC_ASSERT(sizeof(Bucket) % 8 == 0, "Bucket size not compatible with storing flags in lower three bits");
+ static_assert(sizeof(Bucket) % 8 == 0, "Bucket size not compatible with storing flags in lower three bits");
opline->extended_value = (uint32_t)((char*)value - (char*)CG(active_op_array)->static_variables->arData) | mode;
}
/* }}} */
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index 6502770a266..ec6d8b09bbe 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -713,7 +713,7 @@ struct _zend_execute_data {
(call)->This.u2.num_args
/* Ensure the correct alignment before slots calculation */
-ZEND_STATIC_ASSERT(ZEND_MM_ALIGNED_SIZE(sizeof(zval)) == sizeof(zval),
+static_assert(ZEND_MM_ALIGNED_SIZE(sizeof(zval)) == sizeof(zval),
"zval must be aligned by ZEND_MM_ALIGNMENT");
/* A number of call frame slots (zvals) reserved for zend_execute_data. */
#define ZEND_CALL_FRAME_SLOT \
diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h
index 2250a873af2..f7679d920d2 100644
--- a/Zend/zend_execute.h
+++ b/Zend/zend_execute.h
@@ -295,7 +295,7 @@ struct _zend_vm_stack {
};
/* Ensure the correct alignment before slots calculation */
-ZEND_STATIC_ASSERT(ZEND_MM_ALIGNED_SIZE(sizeof(zval)) == sizeof(zval),
+static_assert(ZEND_MM_ALIGNED_SIZE(sizeof(zval)) == sizeof(zval),
"zval must be aligned by ZEND_MM_ALIGNMENT");
/* A number of call frame slots (zvals) reserved for _zend_vm_stack. */
#define ZEND_VM_STACK_HEADER_SLOTS \
diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h
index 2e16a368364..e6c7ed992b4 100644
--- a/Zend/zend_portability.h
+++ b/Zend/zend_portability.h
@@ -862,14 +862,6 @@ extern "C++" {
/** @deprecated */
#define ZEND_CGG_DIAGNOSTIC_IGNORED_END ZEND_DIAGNOSTIC_IGNORED_END
-#if defined(__cplusplus)
-# define ZEND_STATIC_ASSERT(c, m) static_assert((c), m)
-#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11 */
-# define ZEND_STATIC_ASSERT(c, m) _Static_assert((c), m)
-#else
-# define ZEND_STATIC_ASSERT(c, m)
-#endif
-
#if !defined(ZEND_WIN32)
typedef max_align_t zend_max_align_t;
#else
diff --git a/ext/date/time_duration.c b/ext/date/time_duration.c
index a9f69db7a3d..f84bee1fc72 100644
--- a/ext/date/time_duration.c
+++ b/ext/date/time_duration.c
@@ -25,8 +25,8 @@
#define NANOS_IN_MILLI 1000000
#define MILLIS_IN_SEC 1000
-ZEND_STATIC_ASSERT(NANOS_IN_MICRO * MICROS_IN_SEC == NANOS_IN_SEC, "");
-ZEND_STATIC_ASSERT(NANOS_IN_MILLI * MILLIS_IN_SEC == NANOS_IN_SEC, "");
+static_assert(NANOS_IN_MICRO * MICROS_IN_SEC == NANOS_IN_SEC, "");
+static_assert(NANOS_IN_MILLI * MILLIS_IN_SEC == NANOS_IN_SEC, "");
#define Z_PARAM_ULONG(l) { \
zend_long __##l; \
diff --git a/ext/random/engine_mt19937.c b/ext/random/engine_mt19937.c
index a84fb9585c8..bccf3770fb4 100644
--- a/ext/random/engine_mt19937.c
+++ b/ext/random/engine_mt19937.c
@@ -85,7 +85,7 @@
*/
#define N 624 /* length of state vector */
-ZEND_STATIC_ASSERT(
+static_assert(
N == sizeof(((php_random_status_state_mt19937*)0)->state) / sizeof(((php_random_status_state_mt19937*)0)->state[0]),
"Assumed length of Mt19937 state vector does not match actual size."
);
diff --git a/ext/random/php_random_zend_utils.h b/ext/random/php_random_zend_utils.h
index 56718e5c214..411da02a075 100644
--- a/ext/random/php_random_zend_utils.h
+++ b/ext/random/php_random_zend_utils.h
@@ -25,7 +25,7 @@ typedef struct php_random_bytes_insecure_state_for_zend {
php_random_status_state_xoshiro256starstar xoshiro256starstar_state;
} php_random_bytes_insecure_state_for_zend;
-ZEND_STATIC_ASSERT(sizeof(zend_random_bytes_insecure_state) >= sizeof(php_random_bytes_insecure_state_for_zend), "");
+static_assert(sizeof(zend_random_bytes_insecure_state) >= sizeof(php_random_bytes_insecure_state_for_zend), "");
ZEND_ATTRIBUTE_NONNULL PHPAPI void php_random_bytes_insecure_for_zend(
zend_random_bytes_insecure_state *state, void *bytes, size_t size);