From 96c0bc55bb6c1201a73782615b88407e37f4a3ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Mon, 25 Aug 2025 09:19:01 +0200 Subject: [PATCH 1/6] NEWS for d74901ae1a9d6f54c237b796e95bbc5a3da5e837 NEWS was missing for 8.3, but was in 8.4: 62e30ecae10908e9b9c576f37c7a4352dc502d45 --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 97cbb733ca7ac..ccd67d5a27efd 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,8 @@ PHP NEWS triggers "Constant already defined" warning). (ilutov) . Partially fixed bug GH-19542 (Scanning of string literals >=2GB will fail due to signed int overflow). (ilutov) + . Fixed bug GH-19544 (GC treats ZEND_WEAKREF_TAG_MAP references as WeakMap + references). (Arnaud, timwolla) - OpenSSL: . Fixed bug GH-19245 (Success error message on TLS stream accept failure). From b360cf8c289a5ed3f647b04306246c6f9c195444 Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Mon, 25 Aug 2025 01:52:25 -0700 Subject: [PATCH 2/6] ext/hash: Add #[\Deprecated] to MHASH_* constants (#19565) --- ext/hash/hash.c | 15 +++++++++++++-- ext/hash/tests/mhash_001.phpt | 22 +++++++++++----------- ext/hash/tests/mhash_003.phpt | 22 +++++++++++----------- ext/hash/tests/mhash_004.phpt | 2 +- 4 files changed, 36 insertions(+), 25 deletions(-) diff --git a/ext/hash/hash.c b/ext/hash/hash.c index 75e2e241bec12..ec5391a623049 100644 --- a/ext/hash/hash.c +++ b/ext/hash/hash.c @@ -1178,6 +1178,7 @@ static void mhash_init(INIT_FUNC_ARGS) int len; int algo_number = 0; + zend_string *deprecation_reason = zend_string_init("as the mhash*() functions were deprecated", strlen("as the mhash*() functions were deprecated"), 1); for (algo_number = 0; algo_number < MHASH_NUM_ALGOS; algo_number++) { struct mhash_bc_entry algorithm = mhash_to_hash[algo_number]; if (algorithm.mhash_name == NULL) { @@ -1185,8 +1186,18 @@ static void mhash_init(INIT_FUNC_ARGS) } len = slprintf(buf, 127, "MHASH_%s", algorithm.mhash_name); - zend_register_long_constant(buf, len, algorithm.value, CONST_PERSISTENT|CONST_DEPRECATED, module_number); - } + zend_constant *mhash_const = zend_register_long_constant(buf, len, algorithm.value, CONST_PERSISTENT|CONST_DEPRECATED, module_number); + + zend_attribute *deprecation_attrib = zend_add_global_constant_attribute(mhash_const, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); + ZVAL_STR(&deprecation_attrib->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_5)); + deprecation_attrib->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); + ZVAL_STR_COPY(&deprecation_attrib->args[1].value, deprecation_reason); + deprecation_attrib->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); + } + /* Each of the attributes uses ZVAL_STR_COPY instead of trying to special + * case one of them to use ZVAL_STR, but that means there is one more + * reference that needs to be decremented. */ + zend_string_release(deprecation_reason); /* TODO: this cause #69823 zend_register_internal_module(&mhash_module_entry); */ } diff --git a/ext/hash/tests/mhash_001.phpt b/ext/hash/tests/mhash_001.phpt index 29f0f473380b1..87da672550f65 100644 --- a/ext/hash/tests/mhash_001.phpt +++ b/ext/hash/tests/mhash_001.phpt @@ -35,77 +35,77 @@ foreach ($supported_hash_al as $hash=>$wanted) { } ?> --EXPECTF-- -Deprecated: Constant MHASH_MD5 is deprecated in %s on line %d +Deprecated: Constant MHASH_MD5 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d MHASH_MD5 ok -Deprecated: Constant MHASH_SHA1 is deprecated in %s on line %d +Deprecated: Constant MHASH_SHA1 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d MHASH_SHA1 ok -Deprecated: Constant MHASH_HAVAL256 is deprecated in %s on line %d +Deprecated: Constant MHASH_HAVAL256 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d MHASH_HAVAL256 ok -Deprecated: Constant MHASH_HAVAL192 is deprecated in %s on line %d +Deprecated: Constant MHASH_HAVAL192 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d MHASH_HAVAL192 ok -Deprecated: Constant MHASH_HAVAL224 is deprecated in %s on line %d +Deprecated: Constant MHASH_HAVAL224 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d MHASH_HAVAL224 ok -Deprecated: Constant MHASH_HAVAL160 is deprecated in %s on line %d +Deprecated: Constant MHASH_HAVAL160 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d MHASH_HAVAL160 ok -Deprecated: Constant MHASH_RIPEMD160 is deprecated in %s on line %d +Deprecated: Constant MHASH_RIPEMD160 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d MHASH_RIPEMD160 ok -Deprecated: Constant MHASH_GOST is deprecated in %s on line %d +Deprecated: Constant MHASH_GOST is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d MHASH_GOST ok -Deprecated: Constant MHASH_TIGER is deprecated in %s on line %d +Deprecated: Constant MHASH_TIGER is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d MHASH_TIGER ok -Deprecated: Constant MHASH_CRC32 is deprecated in %s on line %d +Deprecated: Constant MHASH_CRC32 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d MHASH_CRC32 ok -Deprecated: Constant MHASH_CRC32B is deprecated in %s on line %d +Deprecated: Constant MHASH_CRC32B is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d MHASH_CRC32B diff --git a/ext/hash/tests/mhash_003.phpt b/ext/hash/tests/mhash_003.phpt index f39e1ff387cb9..1a0983ee54f40 100644 --- a/ext/hash/tests/mhash_003.phpt +++ b/ext/hash/tests/mhash_003.phpt @@ -35,77 +35,77 @@ foreach ($supported_hash_al as $hash=>$wanted) { } ?> --EXPECTF-- -Deprecated: Constant MHASH_MD5 is deprecated in %s on line %d +Deprecated: Constant MHASH_MD5 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash_keygen_s2k() is deprecated since 8.1 in %s on line %d MHASH_MD5 ok -Deprecated: Constant MHASH_SHA1 is deprecated in %s on line %d +Deprecated: Constant MHASH_SHA1 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash_keygen_s2k() is deprecated since 8.1 in %s on line %d MHASH_SHA1 ok -Deprecated: Constant MHASH_HAVAL256 is deprecated in %s on line %d +Deprecated: Constant MHASH_HAVAL256 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash_keygen_s2k() is deprecated since 8.1 in %s on line %d MHASH_HAVAL256 ok -Deprecated: Constant MHASH_HAVAL224 is deprecated in %s on line %d +Deprecated: Constant MHASH_HAVAL224 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash_keygen_s2k() is deprecated since 8.1 in %s on line %d MHASH_HAVAL224 ok -Deprecated: Constant MHASH_HAVAL192 is deprecated in %s on line %d +Deprecated: Constant MHASH_HAVAL192 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash_keygen_s2k() is deprecated since 8.1 in %s on line %d MHASH_HAVAL192 ok -Deprecated: Constant MHASH_HAVAL160 is deprecated in %s on line %d +Deprecated: Constant MHASH_HAVAL160 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash_keygen_s2k() is deprecated since 8.1 in %s on line %d MHASH_HAVAL160 ok -Deprecated: Constant MHASH_RIPEMD160 is deprecated in %s on line %d +Deprecated: Constant MHASH_RIPEMD160 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash_keygen_s2k() is deprecated since 8.1 in %s on line %d MHASH_RIPEMD160 ok -Deprecated: Constant MHASH_GOST is deprecated in %s on line %d +Deprecated: Constant MHASH_GOST is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash_keygen_s2k() is deprecated since 8.1 in %s on line %d MHASH_GOST ok -Deprecated: Constant MHASH_TIGER is deprecated in %s on line %d +Deprecated: Constant MHASH_TIGER is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash_keygen_s2k() is deprecated since 8.1 in %s on line %d MHASH_TIGER ok -Deprecated: Constant MHASH_CRC32 is deprecated in %s on line %d +Deprecated: Constant MHASH_CRC32 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash_keygen_s2k() is deprecated since 8.1 in %s on line %d MHASH_CRC32 ok -Deprecated: Constant MHASH_CRC32B is deprecated in %s on line %d +Deprecated: Constant MHASH_CRC32B is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d Deprecated: Function mhash_keygen_s2k() is deprecated since 8.1 in %s on line %d MHASH_CRC32B diff --git a/ext/hash/tests/mhash_004.phpt b/ext/hash/tests/mhash_004.phpt index e47d48eb1a5d8..e7aa3c5e2df65 100644 --- a/ext/hash/tests/mhash_004.phpt +++ b/ext/hash/tests/mhash_004.phpt @@ -12,7 +12,7 @@ var_dump($algo); ?> --EXPECTF-- -Deprecated: Constant MHASH_MD5 is deprecated in %s on line %d +Deprecated: Constant MHASH_MD5 is deprecated since 8.5, as the mhash*() functions were deprecated in %s on line %d int(1) Deprecated: Function mhash() is deprecated since 8.1 in %s on line %d From 473124595258787b7d79a59111ce6694d216f42a Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Mon, 25 Aug 2025 01:52:35 -0700 Subject: [PATCH 3/6] ext/session: Add #[\Deprecated] to SID constant (#19566) --- ext/session/session.c | 16 ++++++++++++++-- ext/session/tests/015.phpt | 2 +- ext/session/tests/bug72940.phpt | 4 ++-- ext/session/tests/deprecations.phpt | 2 +- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ext/session/session.c b/ext/session/session.c index 884132d885a23..a7a253d8bff41 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -54,6 +54,8 @@ #include "mod_mm.h" #endif +#include "zend_attributes.h" + PHPAPI ZEND_DECLARE_MODULE_GLOBALS(ps) static zend_result php_session_rfc1867_callback(unsigned int event, void *event_data, void **extra); @@ -1502,6 +1504,8 @@ PHPAPI zend_result php_session_reset_id(void) /* zend_hash_str_del(EG(zend_constants), ZEND_STRL("sid")); */ sid = zend_get_constant_str(ZEND_STRL("SID")); + zend_constant *new_sid_constant = NULL; + if (PS(define_sid)) { smart_str var = {0}; @@ -1513,7 +1517,7 @@ PHPAPI zend_result php_session_reset_id(void) zval_ptr_dtor(sid); ZVAL_STR(sid, smart_str_extract(&var)); } else { - REGISTER_STRINGL_CONSTANT("SID", ZSTR_VAL(var.s), ZSTR_LEN(var.s), CONST_DEPRECATED); + new_sid_constant = REGISTER_STRINGL_CONSTANT("SID", ZSTR_VAL(var.s), ZSTR_LEN(var.s), CONST_DEPRECATED); smart_str_free(&var); } } else { @@ -1521,9 +1525,17 @@ PHPAPI zend_result php_session_reset_id(void) zval_ptr_dtor(sid); ZVAL_EMPTY_STRING(sid); } else { - REGISTER_STRINGL_CONSTANT("SID", "", 0, CONST_DEPRECATED); + new_sid_constant = REGISTER_STRINGL_CONSTANT("SID", "", 0, CONST_DEPRECATED); } } + if (new_sid_constant != NULL) { + zend_string *deprecation_reason = zend_string_init("as GET/POST sessions were deprecated", strlen("as GET/POST sessions were deprecated"), 1); + zend_attribute *deprecation_attrib = zend_add_global_constant_attribute(new_sid_constant, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); + ZVAL_STR(&deprecation_attrib->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_4)); + deprecation_attrib->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); + ZVAL_STR(&deprecation_attrib->args[1].value, deprecation_reason); + deprecation_attrib->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); + } /* Apply trans sid if sid cookie is not set */ apply_trans_sid = 0; diff --git a/ext/session/tests/015.phpt b/ext/session/tests/015.phpt index 3154022fae861..1a9285c339332 100644 --- a/ext/session/tests/015.phpt +++ b/ext/session/tests/015.phpt @@ -31,5 +31,5 @@ Deprecated: PHP Startup: Disabling session.use_only_cookies INI setting is depre Deprecated: PHP Startup: Enabling session.use_trans_sid INI setting is deprecated in Unknown on line 0 -Deprecated: Constant SID is deprecated in %s on line 6 +Deprecated: Constant SID is deprecated since 8.4, as GET/POST sessions were deprecated in %s on line %d diff --git a/ext/session/tests/bug72940.phpt b/ext/session/tests/bug72940.phpt index 9a927a5419e4a..4977b05a55233 100644 --- a/ext/session/tests/bug72940.phpt +++ b/ext/session/tests/bug72940.phpt @@ -34,12 +34,12 @@ session_destroy(); --EXPECTF-- Deprecated: ini_set(): Disabling session.use_only_cookies INI setting is deprecated in %s on line 6 -Deprecated: Constant SID is deprecated in %s on line 8 +Deprecated: Constant SID is deprecated since 8.4, as GET/POST sessions were deprecated in %s on line %d string(12) "bug72940test" string(0) "" Deprecated: ini_set(): Disabling session.use_only_cookies INI setting is deprecated in %s on line 13 -Deprecated: Constant SID is deprecated in %s on line 15 +Deprecated: Constant SID is deprecated since 8.4, as GET/POST sessions were deprecated in %s on line %d string(11) "bug72940get" string(21) "PHPSESSID=bug72940get" diff --git a/ext/session/tests/deprecations.phpt b/ext/session/tests/deprecations.phpt index 4a2337fb99dad..0db8ce49b7d0c 100644 --- a/ext/session/tests/deprecations.phpt +++ b/ext/session/tests/deprecations.phpt @@ -60,5 +60,5 @@ Deprecated: session_start(): Disabling session.use_only_cookies INI setting is d Deprecated: session_start(): Enabling session.use_trans_sid INI setting is deprecated in %s on line 32 -Deprecated: Constant SID is deprecated in %s on line 34 +Deprecated: Constant SID is deprecated since 8.4, as GET/POST sessions were deprecated in %s on line %d PHPSESSID=%s From 1cbaa6080758237fc6a292fd0d372ae309ac3b7a Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Mon, 25 Aug 2025 01:52:46 -0700 Subject: [PATCH 4/6] ext/reflection: Align return types and values (#19567) Return `true` or `false` for boolean functions, use `zend_result` for functions that return `SUCCESS` or `FAILURE`. --- ext/reflection/php_reflection.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index ab89c47bbb21a..3a93e61c6d6ac 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -1273,7 +1273,7 @@ static void reflection_attribute_factory(zval *object, HashTable *attributes, ze } /* }}} */ -static int read_attributes(zval *ret, HashTable *attributes, zend_class_entry *scope, +static zend_result read_attributes(zval *ret, HashTable *attributes, zend_class_entry *scope, uint32_t offset, uint32_t target, zend_string *name, zend_class_entry *base, zend_string *filename) /* {{{ */ { ZEND_ASSERT(attributes != NULL); @@ -1653,7 +1653,7 @@ static void reflection_enum_case_factory(zend_class_entry *ce, zend_string *name ZVAL_STR_COPY(reflection_prop_class(object), constant->ce->name); } -static int get_parameter_default(zval *result, parameter_reference *param) { +static zend_result get_parameter_default(zval *result, parameter_reference *param) { if (param->fptr->type == ZEND_INTERNAL_FUNCTION) { if (param->fptr->common.fn_flags & ZEND_ACC_USER_ARG_INFO) { /* We don't have a way to determine the default value for this case right now. */ @@ -4523,16 +4523,16 @@ ZEND_METHOD(ReflectionClass, getMethod) static bool _addmethod(zend_function *mptr, zend_class_entry *ce, HashTable *ht, zend_long filter) { if ((mptr->common.fn_flags & ZEND_ACC_PRIVATE) && mptr->common.scope != ce) { - return 0; + return false; } if (mptr->common.fn_flags & filter) { zval method; reflection_method_factory(ce, mptr, NULL, &method); zend_hash_next_index_insert_new(ht, &method); - return 1; + return true; } - return 0; + return false; } /* }}} */ @@ -7100,7 +7100,7 @@ ZEND_METHOD(ReflectionReference, __construct) static bool is_ignorable_reference(HashTable *ht, zval *ref) { if (Z_REFCOUNT_P(ref) != 1) { - return 0; + return false; } /* Directly self-referential arrays are treated as proper references From 27a1abc1fa335582511d5f445ab319036938408f Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Mon, 25 Aug 2025 10:50:40 +0100 Subject: [PATCH 5/6] README: Fix non-existent `iconv` in macOS instruction (#19475) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follows-up 22e444c5c7 (GH-18670). There is currently no formula called "iconv". [1][2] ``` $ brew install iconv Warning: No available formula with the name "iconv". Did you mean icon or cconv? ``` There package is called "libiconv". [3] Once installed, `./configure` still fails due to a discovery issue. ``` $ ./configure --enable-debug … checking for libiconv... no configure: error: Please specify the install prefix of iconv with --with-iconv= ``` In 2020, as part of the switch from Intel to ARM, Homebrew adopted /opt as the standard location instead of /usr/local. [4][5] Rather than complicating the README with a mandatory `--with-iconv` path (or --without-iconv) for macOS users, improve the discovery to support Homebrew's new location. [1]: https://brew.sh/ [2]: https://github.com/Homebrew/homebrew-core/. [3]: https://formulae.brew.sh/formula/libiconv [4]: https://apple.stackexchange.com/a/437622/33762 [5]: https://docs.brew.sh/FAQ#why-is-the-default-installation-prefix-opthomebrew-on-apple-silicon --- README.md | 2 +- build/php.m4 | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 39c6b89fbbd74..5b8ec6f0d7dc0 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ sudo dnf install re2c bison autoconf make libtool ccache libxml2-devel sqlite-de On MacOS, you can install these using `brew`: ```shell -brew install autoconf bison re2c iconv libxml2 sqlite +brew install autoconf bison re2c libiconv libxml2 sqlite ``` or with `MacPorts`: diff --git a/build/php.m4 b/build/php.m4 index db4265c66fc67..94556cf648f39 100644 --- a/build/php.m4 +++ b/build/php.m4 @@ -1796,7 +1796,17 @@ AC_DEFUN([PHP_SETUP_ICONV], [ dnl Check external libs for iconv funcs. AS_VAR_IF([found_iconv], [no], [ - for i in $PHP_ICONV /usr/local /usr; do + + dnl Find /opt/homebrew/opt/libiconv on macOS + dnl See: https://github.com/php/php-src/pull/19475 + php_brew_prefix=no + AC_CHECK_PROG([BREW], [brew], [brew]) + if test -n "$BREW"; then + AC_MSG_CHECKING([for homebrew prefix]) + php_brew_prefix=$($BREW --prefix 2> /dev/null) + fi + + for i in $PHP_ICONV $php_brew_prefix/opt/libiconv /usr/local /usr; do if test -r $i/include/gnu-libiconv/iconv.h; then ICONV_DIR=$i ICONV_INCLUDE_DIR=$i/include/gnu-libiconv From 7e5ad5caf8e249453a84b4f62565188cf69b877f Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Mon, 25 Aug 2025 03:08:46 -0700 Subject: [PATCH 6/6] ext/intl: Add #[\Deprecated] to U_MULTIPLE_DECIMAL_SEPERATORS constant (#19564) --- ext/intl/common/common.stub.php | 3 +-- ext/intl/common/common_arginfo.h | 12 ++++++++++-- ext/intl/common/common_enum.cpp | 4 ++++ .../deprecated_U_MULTIPLE_DECIMAL_SEPERATORS.phpt | 15 +++++++++++++++ 4 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 ext/intl/tests/deprecated_U_MULTIPLE_DECIMAL_SEPERATORS.phpt diff --git a/ext/intl/common/common.stub.php b/ext/intl/common/common.stub.php index c76ac9f756d4a..bbb8ad2179398 100644 --- a/ext/intl/common/common.stub.php +++ b/ext/intl/common/common.stub.php @@ -423,11 +423,10 @@ */ const U_MULTIPLE_DECIMAL_SEPARATORS = UNKNOWN; /** - * Typo: kept for backward compatibility. Use U_MULTIPLE_DECIMAL_SEPARATORS * @var int - * @deprecated * @cvalue U_MULTIPLE_DECIMAL_SEPERATORS */ +#[\Deprecated(since: '8.3', message: 'use U_MULTIPLE_DECIMAL_SEPARATORS instead')] const U_MULTIPLE_DECIMAL_SEPERATORS = UNKNOWN; /** * @var int diff --git a/ext/intl/common/common_arginfo.h b/ext/intl/common/common_arginfo.h index c5e023ecb8883..64b362a660a06 100644 --- a/ext/intl/common/common_arginfo.h +++ b/ext/intl/common/common_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 83971f2cec8c413d6207382e6ebc4ebf500e805f */ + * Stub hash: 9ed8bfc955a557c02171ec12b4634c60c6fb513e */ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_IntlIterator_current, 0, 0, IS_MIXED, 0) ZEND_END_ARG_INFO() @@ -113,7 +113,7 @@ static void register_common_symbols(int module_number) REGISTER_LONG_CONSTANT("U_UNEXPECTED_TOKEN", U_UNEXPECTED_TOKEN, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("U_FMT_PARSE_ERROR_START", U_FMT_PARSE_ERROR_START, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("U_MULTIPLE_DECIMAL_SEPARATORS", U_MULTIPLE_DECIMAL_SEPARATORS, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("U_MULTIPLE_DECIMAL_SEPERATORS", U_MULTIPLE_DECIMAL_SEPERATORS, CONST_PERSISTENT | CONST_DEPRECATED); + zend_constant *const_U_MULTIPLE_DECIMAL_SEPERATORS = REGISTER_LONG_CONSTANT("U_MULTIPLE_DECIMAL_SEPERATORS", U_MULTIPLE_DECIMAL_SEPERATORS, CONST_PERSISTENT | CONST_DEPRECATED); REGISTER_LONG_CONSTANT("U_MULTIPLE_EXPONENTIAL_SYMBOLS", U_MULTIPLE_EXPONENTIAL_SYMBOLS, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("U_MALFORMED_EXPONENTIAL_PATTERN", U_MALFORMED_EXPONENTIAL_PATTERN, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("U_MULTIPLE_PERCENT_SYMBOLS", U_MULTIPLE_PERCENT_SYMBOLS, CONST_PERSISTENT); @@ -172,6 +172,14 @@ static void register_common_symbols(int module_number) REGISTER_LONG_CONSTANT("U_STRINGPREP_UNASSIGNED_ERROR", U_STRINGPREP_UNASSIGNED_ERROR, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("U_STRINGPREP_CHECK_BIDI_ERROR", U_STRINGPREP_CHECK_BIDI_ERROR, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("U_ERROR_LIMIT", U_ERROR_LIMIT, CONST_PERSISTENT); + + + zend_attribute *attribute_Deprecated_const_U_MULTIPLE_DECIMAL_SEPERATORS_0 = zend_add_global_constant_attribute(const_U_MULTIPLE_DECIMAL_SEPERATORS, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); + ZVAL_STR(&attribute_Deprecated_const_U_MULTIPLE_DECIMAL_SEPERATORS_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_3)); + attribute_Deprecated_const_U_MULTIPLE_DECIMAL_SEPERATORS_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); + zend_string *attribute_Deprecated_const_U_MULTIPLE_DECIMAL_SEPERATORS_0_arg1_str = zend_string_init("use U_MULTIPLE_DECIMAL_SEPARATORS instead", strlen("use U_MULTIPLE_DECIMAL_SEPARATORS instead"), 1); + ZVAL_STR(&attribute_Deprecated_const_U_MULTIPLE_DECIMAL_SEPERATORS_0->args[1].value, attribute_Deprecated_const_U_MULTIPLE_DECIMAL_SEPERATORS_0_arg1_str); + attribute_Deprecated_const_U_MULTIPLE_DECIMAL_SEPERATORS_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); } static zend_class_entry *register_class_IntlIterator(zend_class_entry *class_entry_Iterator) diff --git a/ext/intl/common/common_enum.cpp b/ext/intl/common/common_enum.cpp index c2ab946f85852..8cf9796717f4e 100644 --- a/ext/intl/common/common_enum.cpp +++ b/ext/intl/common/common_enum.cpp @@ -21,6 +21,10 @@ // Fix build on Windows/old versions of ICU #include +extern "C" { +#include +} + #include "common_enum.h" #include "common_arginfo.h" diff --git a/ext/intl/tests/deprecated_U_MULTIPLE_DECIMAL_SEPERATORS.phpt b/ext/intl/tests/deprecated_U_MULTIPLE_DECIMAL_SEPERATORS.phpt new file mode 100644 index 0000000000000..33cdbda7d2296 --- /dev/null +++ b/ext/intl/tests/deprecated_U_MULTIPLE_DECIMAL_SEPERATORS.phpt @@ -0,0 +1,15 @@ +--TEST-- +U_MULTIPLE_DECIMAL_SEPERATORS is deprecated +--EXTENSIONS-- +intl +--FILE-- + +--EXPECTF-- +Deprecated: Constant U_MULTIPLE_DECIMAL_SEPERATORS is deprecated since 8.3, use U_MULTIPLE_DECIMAL_SEPARATORS instead in %s on line %d +int(65793) + +Deprecated: Constant U_MULTIPLE_DECIMAL_SEPERATORS is deprecated since 8.3, use U_MULTIPLE_DECIMAL_SEPARATORS instead in %s on line %d +int(65793)