Skip to content

Language: PROFILE=8.4 default error_reporting includes E_DEPRECATED (#26083) - #26101

Merged
PurHur merged 1 commit into
masterfrom
agent/issue-26083-implicit-nullable-file-deprecation
Jul 31, 2026
Merged

PurHur merged 1 commit into
masterfrom
agent/issue-26083-implicit-nullable-file-deprecation

Conversation

@PurHur

@PurHur PurHur commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Summary

  • Under PHP_COMPILER_PROFILE=8.4, guest error_reporting now defaults to Zend 8.4's mask (E_ALL without E_STRICT = 30719), which includes E_DEPRECATED.
  • Root cause of silent file-level implicit-nullable deprecations: guest kept the ≤8.3 startup mask (22527) so compile-time E_DEPRECATED was filtered before script error_reporting(E_ALL) ran.
  • Unset / ≤8.3 profiles keep 22527 (Stdlib: error_reporting() — default startup mask parity (phase 2 of #3220) #4842). Eval path unchanged. Compliance EXPECTF order fixed to source order.

Closes #26083

Test plan

  • Issue repro (PROFILE=8.4, bin/vm.php file with string $s = null) → PHP Deprecated: … then file_done
  • error_reporting() → 30719 under PROFILE=8.4; 22527 under default profile
  • vendor/bin/phpunit --filter implicit_nullable_parameter (3/3)
  • vendor/bin/phpunit --filter error_reporting_default_mask (2/2 including new profile84 case)
  • Eval path still delivers ERR:8192 via user handler

Verification transcript

$ export PHP_COMPILER_PROFILE=8.4
$ php bin/vm.php /tmp/impl_null_file.php
PHP Deprecated:  Implicitly marking parameter $s as nullable is deprecated, the explicit nullable type must be used instead in /tmp/impl_null_file.php on line 7
file_done

$ # guest default under PROFILE=8.4
30719

$ vendor/bin/phpunit --filter 'implicit_nullable_parameter|error_reporting_default_mask'
OK (5 tests, 5 assertions)

Trust gates (pre-claim): user_release_ready=yes, inventory OK, north-star5-fast ok.

php-src-strict; no new C. Reference: Zend 8.4 error_reporting=30719; Zend/zend_compile.c implicit nullable deprecation.

Made with Cursor

…26083)

Zend 8.4 starts at E_ALL without E_STRICT (30719), so file-level implicit-nullable
compile deprecations are visible without -d. Guest kept the ≤8.3 22527 mask under
PROFILE=8.4, silencing parseAndCompile. Keep 22527 for unset/≤8.3 profiles (#4842).

Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur force-pushed the agent/issue-26083-implicit-nullable-file-deprecation branch from a903c19 to 627c095 Compare July 31, 2026 18:50
@PurHur
PurHur merged commit 6ff985c into master Jul 31, 2026
1 check failed
@PurHur
PurHur deleted the agent/issue-26083-implicit-nullable-file-deprecation branch July 31, 2026 18:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Regression: implicit nullable (string $s = null) E_DEPRECATED silent on file compile under PROFILE=8.4 (re-#23720, Zend/zend_compile.c)

1 participant