Commit d2d54ce3368 for php

commit d2d54ce3368f4f41a35e9f556b05740d49b23aee
Author: Gina Peter Banyard <girgias@php.net>
Date:   Tue Sep 29 16:15:03 2026 +0100

    std: refactor php_array_find() to only use FCC

    This prevents refetching potential trampoline over and over again.

diff --git a/ext/standard/array.c b/ext/standard/array.c
index a434589771b..f276996eda7 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -6918,25 +6918,16 @@ enum php_array_find_result {
 	PHP_ARRAY_FIND_SOME = 1,
 };

-static enum php_array_find_result php_array_find(const HashTable *array, zend_fcall_info fci, zend_fcall_info_cache *fci_cache, zval *result_key, zval *result_value, bool negate_condition)
+static enum php_array_find_result php_array_find(const HashTable *array, const zend_fcall_info_cache *fcc, zval *result_key, zval *result_value, bool negate_condition)
 {
-	zend_ulong num_key;
-	zend_string *str_key;
 	zval retval;
 	zval args[2];
-	zval *operand;

 	if (zend_hash_num_elements(array) == 0) {
 		return PHP_ARRAY_FIND_NONE;
 	}

-	ZEND_ASSERT(ZEND_FCI_INITIALIZED(fci));
-
-	fci.retval = &retval;
-	fci.param_count = 2;
-	fci.params = args;
-
-	ZEND_HASH_FOREACH_KEY_VAL(array, num_key, str_key, operand) {
+	ZEND_HASH_FOREACH_KEY_VAL(array, zend_ulong num_key, zend_string *str_key, zval *operand) {
 		/* Set up the key */
 		if (!str_key) {
 			ZVAL_LONG(&args[1], num_key);
@@ -6949,8 +6940,7 @@ static enum php_array_find_result php_array_find(const HashTable *array, zend_fc

 		ZVAL_COPY_VALUE(&args[0], operand);

-		zend_result result = zend_call_function(&fci, fci_cache);
-		ZEND_ASSERT(result == SUCCESS);
+		zend_call_known_fcc(fcc, &retval, 2, args, NULL);

 		if (UNEXPECTED(Z_ISUNDEF(retval))) {
 			return PHP_ARRAY_FIND_EXCEPTION;
@@ -6978,14 +6968,15 @@ PHP_FUNCTION(array_find)
 {
 	HashTable *array;
 	zend_fcall_info fci;
-	zend_fcall_info_cache fci_cache;
+	zend_fcall_info_cache fcc;

 	ZEND_PARSE_PARAMETERS_START(2, 2)
 		Z_PARAM_ARRAY_HT(array)
-		Z_PARAM_FUNC(fci, fci_cache)
+		Z_PARAM_FUNC_NO_TRAMPOLINE_FREE(fci, fcc)
 	ZEND_PARSE_PARAMETERS_END();

-	php_array_find(array, fci, &fci_cache, NULL, return_value, false);
+	php_array_find(array, &fcc, NULL, return_value, false);
+	zend_release_fcall_info_cache(&fcc);
 }
 /* }}} */

@@ -6994,14 +6985,15 @@ PHP_FUNCTION(array_find_key)
 {
 	HashTable *array;
 	zend_fcall_info fci;
-	zend_fcall_info_cache fci_cache;
+	zend_fcall_info_cache fcc;

 	ZEND_PARSE_PARAMETERS_START(2, 2)
 		Z_PARAM_ARRAY_HT(array)
-		Z_PARAM_FUNC(fci, fci_cache)
+		Z_PARAM_FUNC_NO_TRAMPOLINE_FREE(fci, fcc)
 	ZEND_PARSE_PARAMETERS_END();

-	php_array_find(array, fci, &fci_cache, return_value, NULL, false);
+	php_array_find(array, &fcc, return_value, NULL, false);
+	zend_release_fcall_info_cache(&fcc);
 }
 /* }}} */

@@ -7010,14 +7002,15 @@ PHP_FUNCTION(array_any)
 {
 	HashTable *array;
 	zend_fcall_info fci;
-	zend_fcall_info_cache fci_cache;
+	zend_fcall_info_cache fcc;

 	ZEND_PARSE_PARAMETERS_START(2, 2)
 		Z_PARAM_ARRAY_HT(array)
-		Z_PARAM_FUNC(fci, fci_cache)
+		Z_PARAM_FUNC_NO_TRAMPOLINE_FREE(fci, fcc)
 	ZEND_PARSE_PARAMETERS_END();

-	RETURN_BOOL(php_array_find(array, fci, &fci_cache, NULL, NULL, false) == PHP_ARRAY_FIND_SOME);
+	RETVAL_BOOL(php_array_find(array, &fcc, NULL, NULL, false) == PHP_ARRAY_FIND_SOME);
+	zend_release_fcall_info_cache(&fcc);
 }
 /* }}} */

@@ -7026,14 +7019,15 @@ PHP_FUNCTION(array_all)
 {
 	HashTable *array;
 	zend_fcall_info fci;
-	zend_fcall_info_cache fci_cache;
+	zend_fcall_info_cache fcc;

 	ZEND_PARSE_PARAMETERS_START(2, 2)
 		Z_PARAM_ARRAY_HT(array)
-		Z_PARAM_FUNC(fci, fci_cache)
+		Z_PARAM_FUNC_NO_TRAMPOLINE_FREE(fci, fcc)
 	ZEND_PARSE_PARAMETERS_END();

-	RETURN_BOOL(php_array_find(array, fci, &fci_cache, NULL, NULL, true) == PHP_ARRAY_FIND_NONE);
+	RETVAL_BOOL(php_array_find(array, &fcc, NULL, NULL, true) == PHP_ARRAY_FIND_NONE);
+	zend_release_fcall_info_cache(&fcc);
 }
 /* }}} */