Category
Stdlib · php-src-strict · forward-profile surface
Problem
PHP 8.4 forward profile (PHP_COMPILER_PROFILE=8.4) advertises mb_trim, mb_ltrim, and mb_rtrim, but mb_ucfirst() / mb_lcfirst() remain unregistered (PHP 8.3+ mbstring). Vendor code probing function_exists('mb_ucfirst') before use will skip UTF-8 case changes even though other 8.4 mbstring helpers are present.
| Builtin |
function_exists VM forward 8.4 (2026-07-10) |
mb_trim |
true |
mb_ltrim / mb_rtrim |
true |
mb_ucfirst / mb_lcfirst |
false |
mb_strtoupper |
true |
php-src reference
PHP implementation target
Repro
./script/docker-exec.sh -- bash -lc 'PHP_COMPILER_PROFILE=8.4 php bin/vm.php test/repro/maintainer_gap_mb_ucfirst_forward84_missing.php'
Done when
Category
Stdlib· php-src-strict · forward-profile surfaceProblem
PHP 8.4 forward profile (
PHP_COMPILER_PROFILE=8.4) advertisesmb_trim,mb_ltrim, andmb_rtrim, butmb_ucfirst()/mb_lcfirst()remain unregistered (PHP 8.3+ mbstring). Vendor code probingfunction_exists('mb_ucfirst')before use will skip UTF-8 case changes even though other 8.4 mbstring helpers are present.function_existsVM forward 8.4 (2026-07-10)mb_trimtruemb_ltrim/mb_rtrimtruemb_ucfirst/mb_lcfirstfalsemb_strtouppertruephp-src reference
ext/mbstring/mbstring.c—PHP_FUNCTION(mb_ucfirst),PHP_FUNCTION(mb_lcfirst)ext/mbstring/mbstring.stub.phpPHP implementation target
ext/mbstring/mb_ucfirst.php,mb_lcfirst.php(new) +ext/mbstring/Module.phpregistrationmb_strtoupper/ host mbstring delegationlib/CompilerVersion.phpalongsidemb_trimRepro
./script/docker-exec.sh -- bash -lc 'PHP_COMPILER_PROFILE=8.4 php bin/vm.php test/repro/maintainer_gap_mb_ucfirst_forward84_missing.php'Done when
function_exists('mb_ucfirst')andmb_lcfirsttrue;mb_ucfirst('über')→Über.phptundertest/compliance/cases/stdlib/docs/capabilities.mdrows viascript/capability-matrix.php