Skip to content

Fix PHP 8.4 builtin registration on 8.4.0-dev forward profile (#15025–#15028) - #15031

Merged
PurHur merged 1 commit into
masterfrom
agent/issue-15025-15028-php84-dev-builtin-gates
Jul 2, 2026
Merged

PurHur merged 1 commit into
masterfrom
agent/issue-15025-15028-php84-dev-builtin-gates

Conversation

@PurHur

@PurHur PurHur commented Jul 2, 2026

Copy link
Copy Markdown
Owner

Summary

  • Migrate supportsClassHasFunctions(), supportsStrIncrement(), supportsJsonValidate(), supportsPhp84ArraySearchFunctions(), supportsRoundingModeEnum(), and supportsFpow() from raw version_compare(VERSION, '8.4.0') to advertisesBuiltinSince() so 8.4.0-dev forward profile registers implemented builtins.
  • Phantom gates on Zend 8.2 reference profile remain via builtinAdvertisementVersion() returning 8.2.0 on that profile.
  • Add maintainer-gap repro scripts for each regression.

php-src reference: ext/standard/basic_functions.c, ext/standard/array.c, ext/standard/string.c, ext/json/php_json.c, ext/standard/basic_functions.stub.php (RoundingMode enum).

Test plan

VM repro (all print ok):

php bin/vm.php test/repro/maintainer_gap_class_has_functions_unregistered.php
php bin/vm.php test/repro/maintainer_gap_str_increment_json_validate_unregistered.php
php bin/vm.php test/repro/maintainer_gap_php84_array_search_unregistered.php
php bin/vm.php test/repro/maintainer_gap_rounding_mode_enum_unregistered.php

AOT lint:

php bin/compile.php -l test/repro/maintainer_gap_class_has_functions_unregistered.php
php bin/compile.php -l test/repro/maintainer_gap_str_increment_json_validate_unregistered.php
php bin/compile.php -l test/repro/maintainer_gap_php84_array_search_unregistered.php
php bin/compile.php -l test/repro/maintainer_gap_rounding_mode_enum_unregistered.php

Unit gates:

./vendor/bin/phpunit --filter 'CompilerVersionBuiltinAdvertisementTest|CompilerVersionGateTest' \
  test/unit/CompilerVersionBuiltinAdvertisementTest.php test/unit/CompilerVersionGateTest.php

Compliance:

php bin/vm.php test/compliance/cases/stdlib/class_has_method.phpt
php bin/vm.php test/compliance/cases/stdlib/forward_profile_builtins.phpt

Closes #15025
Closes #15026
Closes #15027
Closes #15028

Made with Cursor

…15028).

Use advertisesBuiltinSince() instead of raw version_compare(VERSION, '8.4.0')
for class_has_*, str_increment/json_validate, array_find family, RoundingMode,
and fpow so -dev profiles register implemented builtins while phantom gates
on Zend 8.2 remain via builtinAdvertisementVersion().

Closes #15025
Closes #15026
Closes #15027
Closes #15028

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment