Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
287 changes: 143 additions & 144 deletions docs/bootstrap-inventory.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`)

Expand Down Expand Up @@ -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 |
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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`

Expand Down Expand Up @@ -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`
Expand Down Expand Up @@ -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)

Expand Down
10 changes: 10 additions & 0 deletions test/compliance/cases/language/exit_die_named_status_die_84.phpt
Original file line number Diff line number Diff line change
@@ -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--
<?php
declare(strict_types=1);
die(status: 2);
--EXPECT_EXIT--
2
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
--TEST--
Language: exit(status:) source pragma enables 8.4 profile without CLI env (#17681)
--FILE--
<?php
declare(strict_types=1);
// php-compiler-language-profile=8.4
exit(status: 3);
--EXPECT_EXIT--
3
1 change: 1 addition & 0 deletions test/selfhost/compiler_lib_spine_smoke/main.php
Original file line number Diff line number Diff line change
Expand Up @@ -2873,6 +2873,7 @@
require_once __DIR__.'/../../../lib/EnumCaseListRewriter.php';
require_once __DIR__.'/../../../lib/EnumCaseListSyntaxRejector.php';
require_once __DIR__.'/../../../lib/ExitFunctionSyntaxRejector.php';
require_once __DIR__.'/../../../lib/LanguageProfileScope.php';
require_once __DIR__.'/../../../lib/Func/JIT.php';
require_once __DIR__.'/../../../lib/Func/PHP.php';
require_once __DIR__.'/../../../lib/GenericArrayTypeSourceRewriter.php';
Expand Down
31 changes: 31 additions & 0 deletions test/unit/LanguageProfileScopeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,35 @@ public function testMaintainerGapExitReproParsesWithoutCliEnv(): void
$block = $runtime->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, "<?php\nexit(status: 0);\n");
$this->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);
}
}
Loading