Commit e5e5a8a9d20 for php
commit e5e5a8a9d20df13d7d4d464af11c8422b6797cbe
Author: Lazizbek Ergashev <lazerg2@gmail.com>
Date: Thu Oct 29 14:26:41 2026 +0500
Fix GH-25023: ZEND_CONTAINER_OF() fails to compile with -std=c11 (#25027)
diff --git a/NEWS b/NEWS
index bf0ae375324..6899e0b14e8 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,8 @@ PHP NEWS
for grouping. (Klaas Skelte van der Werf)
. Fixed unmapping of an unrelated range when the aligned chunk mmap fails
(Marti2203).
+ . Fixed bug GH-25023 (ZEND_CONTAINER_OF() fails to compile with -std=c11).
+ (lazerg)
- CLI:
. Fixed bug GH-24697 (PHP_HTTP_PARSER_STRICT build option doesn't work).
diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h
index ccad24682fd..3549fe6f544 100644
--- a/Zend/zend_portability.h
+++ b/Zend/zend_portability.h
@@ -387,6 +387,12 @@ char *alloca();
#define ZEND_ELEMENT_COUNT(m)
#endif
+#if __STDC_VERSION__ >= 202311L
+# define ZEND_TYPEOF(x) typeof(x)
+#elif ZEND_GCC_VERSION
+# define ZEND_TYPEOF(x) __typeof__(x)
+#endif
+
#if __cplusplus
extern "C++" {
# include <cstddef>
@@ -401,13 +407,12 @@ extern "C++" {
# define ZEND_CONTAINER_OF(ptr, Type, member) zend_container_of<Type, decltype(Type::member)>(ptr, offsetof(Type, member))
}
-#elif __STDC_VERSION__ >= 202311L || ZEND_GCC_VERSION
-/* typeof is C23 or a GCC extension */
+#elif defined(ZEND_TYPEOF)
# define ZEND_CONTAINER_OF(ptr, Type, member) \
_Generic( \
(ptr), \
- const typeof(((Type*)0)->member) *: ((const Type*)((char*)(ptr) - offsetof(Type, member))), \
- typeof(((Type*)0)->member) *: ((Type*)((char*)(ptr) - offsetof(Type, member))) \
+ const ZEND_TYPEOF(((Type*)0)->member) *: ((const Type*)((char*)(ptr) - offsetof(Type, member))), \
+ ZEND_TYPEOF(((Type*)0)->member) *: ((Type*)((char*)(ptr) - offsetof(Type, member))) \
)
#else
/* Define a variant that does not keep const-ness for older compilers. Mismatches