Skip to content

AOT: fix uncaught fatals and try/catch getMessage/AFTER (#23641) - #23652

Merged
PurHur merged 3 commits into
masterfrom
agent/issue-23641-aot-exceptions
Jul 27, 2026
Merged

PurHur merged 3 commits into
masterfrom
agent/issue-23641-aot-exceptions

Conversation

@PurHur

@PurHur PurHur commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Summary

php-src: Zend/zend_exceptions.c — uncaught printer / default exception construct. PHP implementation: lib/JIT/Builtin/UncaughtThrowPrinter.php, lib/JIT/Call/ExceptionConstruct.php, Object_::seedThrowableExternalClass, TryCatchHelper / compileCatchArmAtEntry.

Test plan

  • Issue repros (Docker, 16g):
./phpc build -o …/uncaught test/repro/aot-exceptions-23641/uncaught.php
./uncaught → BEFORE + Uncaught LogicException: boom… in …/uncaught.php:3, rc=255

./phpc build -o …/caught test/repro/aot-exceptions-23641/caught.php
./caught → BEFORE / caught: boom / AFTER, rc=0
  • php script/check-selfhost-spine-coverage-sync.php → OK
  • php script/bootstrap-inventory.php --check → OK 6583/6583 (after regen)
  • Did not run full ci-local / differential-sweep --aot (scoped language fix)

Made with Cursor

PurHur and others added 3 commits July 27, 2026 01:32
Seed Throwable layout + ExceptionConstruct for user-script AOT, print
Zend-shaped uncaught fatals instead of abort, and keep catch arms from
emitting an early returnVoid so merge/AFTER runs.

Co-authored-by: Cursor <cursoragent@cursor.com>
Keep only the issue uncaught/caught/caught-no-msg scripts.

Co-authored-by: Cursor <cursoragent@cursor.com>
Propagate TYPE_NEW startLine into callSiteLine and store AOT entry path
on construct so uncaught fatals print a real file:line.

Co-authored-by: Cursor <cursoragent@cursor.com>
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.

AOT: exceptions are broken — caught blocks abort, getMessage() empty, uncaught prints nothing

1 participant