From bbc2260c1aa99783c3591385cefa2c746cb4a97e Mon Sep 17 00:00:00 2001 From: David Carlier Date: Thu, 25 Dec 2025 08:23:39 +0000 Subject: [PATCH 1/6] Fix GH-20767: build failure with preserve_none attribute enabled on mac. Established that build < 1700.4.4.1 tends to fail thus we disable the preserve_none attribute feature for these cases. --- Zend/Zend.m4 | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/Zend/Zend.m4 b/Zend/Zend.m4 index 33009e9909f5a..5c8b63a6f6185 100644 --- a/Zend/Zend.m4 +++ b/Zend/Zend.m4 @@ -166,11 +166,42 @@ AC_CHECK_FUNC([sigsetjmp],, [AC_MSG_FAILURE([Required sigsetjmp not found.])], [#include ])]) + ZEND_CHECK_STACK_DIRECTION ZEND_CHECK_FLOAT_PRECISION ZEND_DLSYM_CHECK ZEND_CHECK_GLOBAL_REGISTER_VARIABLES -ZEND_CHECK_PRESERVE_NONE + +case $host_os in +darwin*) + dnl versions prior to this lead to compilation failure + min_apple_clang_train=1700.4.4.1 + + apple_line=`$CC --version 2>/dev/null | head -n 1` + echo "$apple_line" | grep -q "Apple clang" || apple_line=`$CC -v 2>&1 | head -n 1` + + apple_train=`echo "$apple_line" | sed -n 's/.*(clang-\([0-9][0-9.]*\)).*/\1/p'` + have_preserve_none=yes + + AS_IF([test -n "$apple_train"], [ + AC_MSG_CHECKING([Apple clang build train >= $min_apple_clang_train]) + AS_VERSION_COMPARE([$apple_train], [$min_apple_clang_train], + [have_preserve_none=no], + [], + [] + ) + AS_IF([test "x$have_preserve_none" = xyes], + [ZEND_CHECK_PRESERVE_NONE], + [AC_MSG_NOTICE([Skipping preserve_none])] + ) + ], [ + dnl Not Apple clang (could be Homebrew clang, GCC, etc.) -> keep enabled + ZEND_CHECK_PRESERVE_NONE + : + ]) + ;; +esac + ZEND_CHECK_CPUID_COUNT AC_MSG_CHECKING([whether to enable thread safety]) From 9327fb3eb3e7eae1620f789b4b19536659e976cd Mon Sep 17 00:00:00 2001 From: David Carlier Date: Thu, 25 Dec 2025 08:35:25 +0000 Subject: [PATCH 2/6] enabling for the rest --- Zend/Zend.m4 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Zend/Zend.m4 b/Zend/Zend.m4 index 5c8b63a6f6185..daa762c00758e 100644 --- a/Zend/Zend.m4 +++ b/Zend/Zend.m4 @@ -200,6 +200,9 @@ darwin*) : ]) ;; +*) + ZEND_CHECK_PRESERVE_NONE + ;; esac ZEND_CHECK_CPUID_COUNT From 404f60281e483d2c6a1fcfc46d2009903a42e199 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Thu, 25 Dec 2025 23:35:33 +0000 Subject: [PATCH 3/6] apply suggestion --- Zend/Zend.m4 | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/Zend/Zend.m4 b/Zend/Zend.m4 index daa762c00758e..ce4c1568990ce 100644 --- a/Zend/Zend.m4 +++ b/Zend/Zend.m4 @@ -175,29 +175,19 @@ ZEND_CHECK_GLOBAL_REGISTER_VARIABLES case $host_os in darwin*) dnl versions prior to this lead to compilation failure - min_apple_clang_train=1700.4.4.1 - - apple_line=`$CC --version 2>/dev/null | head -n 1` - echo "$apple_line" | grep -q "Apple clang" || apple_line=`$CC -v 2>&1 | head -n 1` - - apple_train=`echo "$apple_line" | sed -n 's/.*(clang-\([0-9][0-9.]*\)).*/\1/p'` - have_preserve_none=yes - - AS_IF([test -n "$apple_train"], [ - AC_MSG_CHECKING([Apple clang build train >= $min_apple_clang_train]) - AS_VERSION_COMPARE([$apple_train], [$min_apple_clang_train], - [have_preserve_none=no], - [], - [] - ) - AS_IF([test "x$have_preserve_none" = xyes], - [ZEND_CHECK_PRESERVE_NONE], - [AC_MSG_NOTICE([Skipping preserve_none])] - ) + dnl Prefer __apple_build_version__ (reliable, numeric) when available. + dnl The known-good minimum corresponds to 17000404 (see PR discussion). + min_apple_build_version=17000404 + apple_build_version=`echo | $CC -dM -E -x c - 2>/dev/null | sed -n 's/^#define __apple_build_version__ \([0-9][0-9]*\)$/\1/p'` + + AS_IF([test -n "$apple_build_version"], [ + AC_MSG_CHECKING([Apple clang __apple_build_version__ >= $min_apple_build_version]) + AS_IF([test "$apple_build_version" -ge "$min_apple_build_version"], [ + ZEND_CHECK_PRESERVE_NONE + ]) ], [ dnl Not Apple clang (could be Homebrew clang, GCC, etc.) -> keep enabled ZEND_CHECK_PRESERVE_NONE - : ]) ;; *) From 43c03c4a3beb3685f00b84a80416c45bfbc270eb Mon Sep 17 00:00:00 2001 From: David Carlier Date: Fri, 26 Dec 2025 17:51:05 +0000 Subject: [PATCH 4/6] apply arnaud suggestion --- Zend/zend_portability.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h index c7e12d58c1f53..665a9f88cfdad 100644 --- a/Zend/zend_portability.h +++ b/Zend/zend_portability.h @@ -336,10 +336,13 @@ char *alloca(); # define ZEND_PRESERVE_NONE __attribute__((preserve_none)) #endif + +#if !defined(__apple_build_version__) || (defined(__apple_build_version__) && __apple_build_version__ >= 17000404) #if __has_attribute(musttail) # define HAVE_MUSTTAIL # define ZEND_MUSTTAIL __attribute__((musttail)) #endif +#endif #if (defined(__GNUC__) && __GNUC__ >= 3 && !defined(__INTEL_COMPILER) && !defined(__APPLE__) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__)) || __has_attribute(noreturn) # define HAVE_NORETURN From f74024ff745eb47c21f9b56d4eb53fca5803f94c Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sat, 27 Dec 2025 20:33:06 +0000 Subject: [PATCH 5/6] trying @petk suggestion --- Zend/Zend.m4 | 33 ++++++++------------------------- Zend/zend_portability.h | 8 ++++---- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/Zend/Zend.m4 b/Zend/Zend.m4 index ce4c1568990ce..b89f1f26d74db 100644 --- a/Zend/Zend.m4 +++ b/Zend/Zend.m4 @@ -166,35 +166,11 @@ AC_CHECK_FUNC([sigsetjmp],, [AC_MSG_FAILURE([Required sigsetjmp not found.])], [#include ])]) - ZEND_CHECK_STACK_DIRECTION ZEND_CHECK_FLOAT_PRECISION ZEND_DLSYM_CHECK ZEND_CHECK_GLOBAL_REGISTER_VARIABLES - -case $host_os in -darwin*) - dnl versions prior to this lead to compilation failure - dnl Prefer __apple_build_version__ (reliable, numeric) when available. - dnl The known-good minimum corresponds to 17000404 (see PR discussion). - min_apple_build_version=17000404 - apple_build_version=`echo | $CC -dM -E -x c - 2>/dev/null | sed -n 's/^#define __apple_build_version__ \([0-9][0-9]*\)$/\1/p'` - - AS_IF([test -n "$apple_build_version"], [ - AC_MSG_CHECKING([Apple clang __apple_build_version__ >= $min_apple_build_version]) - AS_IF([test "$apple_build_version" -ge "$min_apple_build_version"], [ - ZEND_CHECK_PRESERVE_NONE - ]) - ], [ - dnl Not Apple clang (could be Homebrew clang, GCC, etc.) -> keep enabled - ZEND_CHECK_PRESERVE_NONE - ]) - ;; -*) - ZEND_CHECK_PRESERVE_NONE - ;; -esac - +ZEND_CHECK_PRESERVE_NONE ZEND_CHECK_CPUID_COUNT AC_MSG_CHECKING([whether to enable thread safety]) @@ -500,6 +476,13 @@ AC_DEFUN([ZEND_CHECK_PRESERVE_NONE], [dnl AC_CACHE_CHECK([for preserve_none calling convention], [php_cv_preserve_none], [AC_RUN_IFELSE([AC_LANG_SOURCE([[ + +#ifdef __apple_build_version__ +# if __apple_build_version__ < 17000404 +# error This version of Apple Clang doesn't support preserve_none +# endif +#endif + #include #include diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h index 665a9f88cfdad..6546ebfb5b790 100644 --- a/Zend/zend_portability.h +++ b/Zend/zend_portability.h @@ -338,10 +338,10 @@ char *alloca(); #if !defined(__apple_build_version__) || (defined(__apple_build_version__) && __apple_build_version__ >= 17000404) -#if __has_attribute(musttail) -# define HAVE_MUSTTAIL -# define ZEND_MUSTTAIL __attribute__((musttail)) -#endif +# if __has_attribute(musttail) +# define HAVE_MUSTTAIL +# define ZEND_MUSTTAIL __attribute__((musttail)) +# endif #endif #if (defined(__GNUC__) && __GNUC__ >= 3 && !defined(__INTEL_COMPILER) && !defined(__APPLE__) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__)) || __has_attribute(noreturn) From 478dc34b3273e73a21ba1a7a77b0850110b6d8c4 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sun, 28 Dec 2025 14:39:11 +0000 Subject: [PATCH 6/6] review --- Zend/Zend.m4 | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Zend/Zend.m4 b/Zend/Zend.m4 index b89f1f26d74db..33009e9909f5a 100644 --- a/Zend/Zend.m4 +++ b/Zend/Zend.m4 @@ -476,13 +476,6 @@ AC_DEFUN([ZEND_CHECK_PRESERVE_NONE], [dnl AC_CACHE_CHECK([for preserve_none calling convention], [php_cv_preserve_none], [AC_RUN_IFELSE([AC_LANG_SOURCE([[ - -#ifdef __apple_build_version__ -# if __apple_build_version__ < 17000404 -# error This version of Apple Clang doesn't support preserve_none -# endif -#endif - #include #include