Skip to content

JIT: per-frame undef-var flags and skip guards on formals (#36190) - #36285

Merged
PurHur merged 3 commits into
masterfrom
agent/issue-36190-undef-flag-alloca-domination
Sep 2, 2026
Merged

JIT: per-frame undef-var flags and skip guards on formals (#36190)#36285
PurHur merged 3 commits into
masterfrom
agent/issue-36190-undef-flag-alloca-domination

Conversation

@PurHur

@PurHur PurHur commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Summary

  • Replace module-global phpc_scope_var_init_* assigned flags with per-activation entry allocas for user-function CVs so recursive frames do not share state (matches Zend initializedSlots per frame).
  • Keep module globals for {main} script CVs — marks/guards can lower in __init__ vs @main and must share one slot without LLVM dominance violations (AOT: print undefined-array-key warnings on stderr (#31991) #36081).
  • Skip ZEND_CHECK_UNDEFINED_VAR for formal parameters (always defined); add unit coverage for fibo_r IR and recursion semantics vs Zend.

Test plan

./script/phpunit.sh --filter UndefinedVariableParameterGuardTest
# OK (2 tests, 9 assertions)

./script/aot-smoke.sh
# aot-smoke: 9 passed, 0 failed

make dev-verify-fast
# dev-verify-fast: OK (143s wall)

Closes #36190

Made with Cursor

PurHur and others added 3 commits September 2, 2026 04:13
Replace module-global phpc_scope_var_init_* bits with function-entry i8
allocas so recursive activations do not share assigned state, and omit
ZEND_CHECK_UNDEFINED_VAR for parameters that are always defined.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…obals (#36190)

Keep module globals for {main} script CVs (__init__ vs @main share one slot);
user-function CVs use per-activation entry allocas so recursion matches Zend.

Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur merged commit 478fd44 into master Sep 2, 2026
1 check failed
@PurHur
PurHur deleted the agent/issue-36190-undef-flag-alloca-domination branch September 2, 2026 04:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant