diff --git a/docs/bootstrap-inventory.md b/docs/bootstrap-inventory.md index 22e20567f50..6c83c5a90ea 100644 --- a/docs/bootstrap-inventory.md +++ b/docs/bootstrap-inventory.md @@ -12,7 +12,7 @@ Regenerate: `php script/bootstrap-inventory.php` | Phase A inventory files (M2 ratio SSOT) | 4338 | | Phase A ratio-deferred paths | 0 | | Source constructs flagged (blockers) | 0 | -| Source constructs flagged (warnings) | 11692 | +| Source constructs flagged (warnings) | 11691 | ## Compiler CFG gaps (`lib/Compiler.php`) @@ -2949,7 +2949,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag | `lib/JIT/Builtin/EnvLocalRuntime.php` | 0 | 3 | | `lib/JIT/Builtin/EnvironMirrorUserScriptLlvm.php` | 0 | 1 | | `lib/JIT/Builtin/ErrorHandler.php` | 0 | 1 | -| `lib/JIT/Builtin/ErrorHandlerJitRuntime.php` | 0 | 3 | +| `lib/JIT/Builtin/ErrorHandlerJitRuntime.php` | 0 | 2 | | `lib/JIT/Builtin/ErrorHandlerOutput.php` | 0 | 1 | | `lib/JIT/Builtin/ErrorRaise.php` | 0 | 2 | | `lib/JIT/Builtin/ErrorReporting.php` | 0 | 1 | @@ -22584,136 +22584,136 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag - new Operand\Temporary (line 13518) - new OpCode (line 13565) - new Temporary (line 16351) -- new Operand\Temporary (line 29659) -- new Operand\Temporary (line 29664) -- new Operand\Temporary (line 29737) -- new Operand\Temporary (line 29742) -- new OpCode (line 29879) -- new OpCode (line 29946) -- new OpCode (line 30040) -- new OpCode (line 30134) -- new OpCode (line 30215) -- new OpCode (line 30300) -- new OpCode (line 30390) -- new OpCode (line 30496) -- new CfgVariable (line 32813) -- new Literal (line 32813) -- new Variable (line 32845) -- new Variable (line 32899) -- new OpCode (line 32928) -- new Operand\Temporary (line 33690) -- new OpCode (line 33692) -- new OpCode (line 33720) -- new OpCode (line 33736) -- new OpCode (line 33744) +- new Operand\Temporary (line 29674) +- new Operand\Temporary (line 29679) +- new Operand\Temporary (line 29752) +- new Operand\Temporary (line 29757) +- new OpCode (line 29894) +- new OpCode (line 29961) +- new OpCode (line 30055) +- new OpCode (line 30149) +- new OpCode (line 30230) +- new OpCode (line 30315) +- new OpCode (line 30405) +- new OpCode (line 30511) +- new CfgVariable (line 32828) +- new Literal (line 32828) +- new Variable (line 32860) +- new Variable (line 32914) +- new OpCode (line 32943) +- new Operand\Temporary (line 33705) +- new OpCode (line 33707) +- new OpCode (line 33735) - new OpCode (line 33751) -- new OpCode (line 33763) -- new OpCode (line 33780) -- new OpCode (line 33786) -- new OpCode (line 33792) -- new OpCode (line 33797) -- new OpCode (line 33813) -- new OpCode (line 33826) -- new Variable (line 33837) -- new Operand\Literal (line 33839) -- new OpCode (line 33842) -- new OpCode (line 33912) -- new OpCode (line 33923) -- new OpCode (line 33936) -- new OpCode (line 34110) -- new Operand\Variable (line 34378) -- new Operand\Literal (line 34378) -- new OpCode (line 34410) -- new OpCode (line 34432) -- new OpCode (line 34440) -- new OpCode (line 34446) -- new Variable (line 34476) -- new Temporary (line 34478) -- new Variable (line 34486) -- new Temporary (line 34488) -- new OpCode (line 34536) -- new Operand\Temporary (line 34557) -- new Operand\Temporary (line 34563) -- new Operand\Temporary (line 34569) -- new Operand\Temporary (line 34575) +- new OpCode (line 33759) +- new OpCode (line 33766) +- new OpCode (line 33778) +- new OpCode (line 33795) +- new OpCode (line 33801) +- new OpCode (line 33807) +- new OpCode (line 33812) +- new OpCode (line 33828) +- new OpCode (line 33841) +- new Variable (line 33852) +- new Operand\Literal (line 33854) +- new OpCode (line 33857) +- new OpCode (line 33927) +- new OpCode (line 33938) +- new OpCode (line 33951) +- new OpCode (line 34125) +- new Operand\Variable (line 34393) +- new Operand\Literal (line 34393) +- new OpCode (line 34425) +- new OpCode (line 34447) +- new OpCode (line 34455) +- new OpCode (line 34461) +- new Variable (line 34491) +- new Temporary (line 34493) +- new Variable (line 34501) +- new Temporary (line 34503) +- new OpCode (line 34551) +- new Operand\Temporary (line 34572) +- new Operand\Temporary (line 34578) - new Operand\Temporary (line 34584) -- new Operand\Temporary (line 36470) -- new Variable (line 36875) -- new Variable (line 36879) -- new Variable (line 36887) -- new Variable (line 36891) -- new Variable (line 37175) -- new OpCode (line 37250) -- new OpCode (line 37281) -- new OpCode (line 37329) -- new OpCode (line 37346) -- new OpCode (line 37365) -- new OpCode (line 37385) -- new OpCode (line 37427) -- new OpCode (line 37462) -- new OpCode (line 37480) -- new OpCode (line 37513) -- new OpCode (line 37554) -- new OpCode (line 37570) -- new OpCode (line 37588) -- new OpCode (line 37605) -- new OpCode (line 37619) +- new Operand\Temporary (line 34590) +- new Operand\Temporary (line 34599) +- new Operand\Temporary (line 36484) +- new Variable (line 36893) +- new Variable (line 36897) +- new Variable (line 36905) +- new Variable (line 36909) +- new Variable (line 37193) +- new OpCode (line 37268) +- new OpCode (line 37299) +- new OpCode (line 37347) +- new OpCode (line 37364) +- new OpCode (line 37383) +- new OpCode (line 37403) +- new OpCode (line 37449) +- new OpCode (line 37484) +- new OpCode (line 37502) +- new OpCode (line 37535) +- new OpCode (line 37576) +- new OpCode (line 37592) +- new OpCode (line 37610) +- new OpCode (line 37627) - new OpCode (line 37641) - new OpCode (line 37663) -- new OpCode (line 37672) -- new OpCode (line 37692) -- new OpCode (line 37769) -- new OpCode (line 37782) -- new OpCode (line 37795) -- new OpCode (line 37800) +- new OpCode (line 37685) +- new OpCode (line 37694) +- new OpCode (line 37714) +- new OpCode (line 37791) +- new OpCode (line 37804) - new OpCode (line 37817) -- new OpCode (line 37863) -- new OpCode (line 37903) -- new OpCode (line 37995) -- new OpCode (line 38034) -- new OpCode (line 38112) -- new OpCode (line 38137) -- new OpCode (line 38169) -- new OpCode (line 38241) -- new Operand\Temporary (line 39940) -- new Operand\Temporary (line 40433) -- new Operand\Temporary (line 40619) -- new Operand\Temporary (line 40651) -- new Operand\Temporary (line 40747) -- new Operand\Temporary (line 40869) -- new OpCode (line 40871) -- new OpCode (line 42249) -- new Operand\Temporary (line 42716) -- new OpCode (line 43234) -- new Operand\Literal (line 43533) -- new Variable (line 43535) -- new OpCode (line 43581) -- new OpCode (line 43796) -- new OpCode (line 43806) -- new OpCode (line 43809) -- new Operand\Temporary (line 43836) -- new Operand\Temporary (line 43873) -- new OpCode (line 43875) -- new OpCode (line 43886) -- new Operand\Temporary (line 43889) -- new OpCode (line 43891) -- new OpCode (line 43899) -- new OpCode (line 43907) -- new OpCode (line 43915) -- new OpCode (line 43918) -- new OpCode (line 43946) -- new OpCode (line 43969) -- new OpCode (line 43986) -- new OpCode (line 43993) -- new Operand\Literal (line 44682) -- new OpCode (line 45811) -- new Literal (line 45843) -- new OpCode (line 45942) -- new Variable (line 45949) -- new Temporary (line 45951) -- new OpCode (line 45954) -- new CompileFatal (line 46289) -- new CompileFatal (line 46544) +- new OpCode (line 37822) +- new OpCode (line 37839) +- new OpCode (line 37885) +- new OpCode (line 37925) +- new OpCode (line 38017) +- new OpCode (line 38056) +- new OpCode (line 38134) +- new OpCode (line 38159) +- new OpCode (line 38191) +- new OpCode (line 38263) +- new Operand\Temporary (line 39962) +- new Operand\Temporary (line 40455) +- new Operand\Temporary (line 40641) +- new Operand\Temporary (line 40673) +- new Operand\Temporary (line 40769) +- new Operand\Temporary (line 40891) +- new OpCode (line 40893) +- new OpCode (line 42271) +- new Operand\Temporary (line 42738) +- new OpCode (line 43256) +- new Operand\Literal (line 43555) +- new Variable (line 43557) +- new OpCode (line 43603) +- new OpCode (line 43818) +- new OpCode (line 43828) +- new OpCode (line 43831) +- new Operand\Temporary (line 43858) +- new Operand\Temporary (line 43895) +- new OpCode (line 43897) +- new OpCode (line 43908) +- new Operand\Temporary (line 43911) +- new OpCode (line 43913) +- new OpCode (line 43921) +- new OpCode (line 43929) +- new OpCode (line 43937) +- new OpCode (line 43940) +- new OpCode (line 43968) +- new OpCode (line 43991) +- new OpCode (line 44008) +- new OpCode (line 44015) +- new Operand\Literal (line 44704) +- new OpCode (line 45833) +- new Literal (line 45865) +- new OpCode (line 45964) +- new Variable (line 45971) +- new Temporary (line 45973) +- new OpCode (line 45976) +- new CompileFatal (line 46311) +- new CompileFatal (line 46566) - 981 class method(s) - 47 closure(s) @@ -23985,9 +23985,8 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag ### `lib/JIT/Builtin/ErrorHandlerJitRuntime.php` **Warnings** (review for bootstrap subset): -- new JIT (line 491) -- 20 class method(s) -- 2 closure(s) +- 24 class method(s) +- 1 closure(s) ### `lib/JIT/Builtin/ErrorHandlerOutput.php` @@ -24015,8 +24014,8 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag ### `lib/JIT/Builtin/ExceptionHandlerJitRuntime.php` **Warnings** (review for bootstrap subset): -- new JIT (line 500) -- 19 class method(s) +- new JIT (line 505) +- 20 class method(s) - 2 closure(s) ### `lib/JIT/Builtin/ExceptionHandlerOutput.php` @@ -27543,18 +27542,18 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag - new Call\ExceptionGetMessage (line 871) - new Call\DatePeriodCreateFromISO8601String (line 877) - new Call\DatePeriodIteratorMethod (line 879) -- new Result (line 1181) -- new Result (line 1202) -- new Variable (line 1797) -- new Variable (line 1934) -- new Variable (line 2132) -- new VMVariable (line 2290) -- new VMVariable (line 2306) -- new VMVariable (line 2312) -- new VMVariable (line 2318) -- new VMVariable (line 2329) -- new Variable (line 2359) -- new Variable (line 2399) +- new Result (line 1183) +- new Result (line 1204) +- new Variable (line 1799) +- new Variable (line 1936) +- new Variable (line 2134) +- new VMVariable (line 2292) +- new VMVariable (line 2308) +- new VMVariable (line 2314) +- new VMVariable (line 2320) +- new VMVariable (line 2331) +- new Variable (line 2361) +- new Variable (line 2401) - 98 class method(s) - 28 closure(s) diff --git a/test/compliance/cases/language/exit_die_named_status_die_84.phpt b/test/compliance/cases/language/exit_die_named_status_die_84.phpt new file mode 100644 index 00000000000..72103e003e3 --- /dev/null +++ b/test/compliance/cases/language/exit_die_named_status_die_84.phpt @@ -0,0 +1,10 @@ +--TEST-- +Language: die(status:) named parameter on PHP 8.4 forward profile (#17681, Zend/zend_compile.c) +--ENV-- +PHP_COMPILER_PROFILE=8.4 +--FILE-- +parseAndCompile($code, $path); $this->assertNotNull($block); } + + public function testMaintainerGapDieReproParsesWithoutCliEnv(): void + { + $path = dirname(__DIR__).'/repro/maintainer_gap_die_named_status.php'; + $code = file_get_contents($path); + $this->assertIsString($code); + $runtime = new Runtime(); + $block = $runtime->parseAndCompile($code, $path); + $this->assertNotNull($block); + } + + public function testManifestLanguageProfileEnablesExitFunctionFormDuringScope(): void + { + $root = sys_get_temp_dir().'/phpc_lang_profile_'.uniqid('', true); + mkdir($root, 0777, true); + file_put_contents($root.'/phpc.json', json_encode(['languageProfile' => '8.4'])); + $script = $root.'/main.php'; + file_put_contents($script, "assertFalse(CompilerVersion::supportsExitFunctionForm()); + $scope = LanguageProfileScope::beginForCompilationUnit(file_get_contents($script), $script); + try { + $this->assertTrue($scope->wasApplied()); + $this->assertTrue(CompilerVersion::supportsExitFunctionForm()); + } finally { + $scope->end(); + } + $this->assertFalse(CompilerVersion::supportsExitFunctionForm()); + @unlink($script); + @unlink($root.'/phpc.json'); + @rmdir($root); + } }