Category
stdlib · php-src-strict · introspection parity
Problem
On PHP_COMPILER_PROFILE=8.4, IEEE math builtins are registered for direct calls but withheld from function_exists() until CompilerVersion::VERSION reaches stable 8.4.0. Zend 8.4 advertises these functions when the language profile supports them; code using function_exists('fpow') before calling breaks.
| Call / probe |
Zend 8.4+ (forward) |
VM PHP_COMPILER_PROFILE=8.4 (2026-07-05) |
fpow(2, 3) |
8 |
8 (callable) |
function_exists('fpow') |
true |
false |
function_exists('nextafter') |
true |
false |
Same pattern for fmin() / fmax().
php-src reference
PHP implementation target
Repro
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && PHP_COMPILER_PROFILE=8.4 php bin/vm.php test/repro/maintainer_gap_fpow_function_exists_forward_84.php'
PHP_COMPILER_PROFILE=8.4 php bin/vm.php test/repro/maintainer_gap_fpow_function_exists_forward_84.php
Done when
Related
Category
stdlib· php-src-strict · introspection parityProblem
On
PHP_COMPILER_PROFILE=8.4, IEEE math builtins are registered for direct calls but withheld fromfunction_exists()untilCompilerVersion::VERSIONreaches stable8.4.0. Zend 8.4 advertises these functions when the language profile supports them; code usingfunction_exists('fpow')before calling breaks.PHP_COMPILER_PROFILE=8.4(2026-07-05)fpow(2, 3)88(callable)function_exists('fpow')truefalsefunction_exists('nextafter')truefalseSame pattern for
fmin()/fmax().php-src reference
ext/standard/math.c—zend_fpow,zend_nextafterext/standard/basic_functions.c—function_existsregistrationPHP implementation target
ext/standard/BuiltinIntrospectionPolicy.php— advertise whensupportsFpow()/supportsNextafter()true on forward profile, not onlyadvertisesFpow()stable runtimelib/CompilerVersion.php— alignadvertisesFpow()/advertisesNextafter()withlanguageProfileVersion()(mirror Stdlib: PHP 8.4 forward-profile gated builtins — function_exists/extension_loaded true on reference profile (ext/standard) #16086 bcmath pattern decision)ext/standard/Module.php— registration already present; introspection-only fixRepro
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && PHP_COMPILER_PROFILE=8.4 php bin/vm.php test/repro/maintainer_gap_fpow_function_exists_forward_84.php' PHP_COMPILER_PROFILE=8.4 php bin/vm.php test/repro/maintainer_gap_fpow_function_exists_forward_84.phpDone when
ok: fpow advertised(and siblings) on forward profilefunction_exists('fpow') === falselike Zend 8.2test/compliance/cases/stdlib/Related