Skip to content

Fix GH-22256: Preserve frameless argument order#22766

Open
prateekbhujel wants to merge 1 commit into
php:PHP-8.4from
prateekbhujel:prateek/fix-gh-22256-frameless-arg-order
Open

Fix GH-22256: Preserve frameless argument order#22766
prateekbhujel wants to merge 1 commit into
php:PHP-8.4from
prateekbhujel:prateek/fix-gh-22256-frameless-arg-order

Conversation

@prateekbhujel

@prateekbhujel prateekbhujel commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Frameless calls keep CV arguments in their original slots until the handler runs. If a later argument changes one of those CVs, the handler sees the new value instead of the value from when the earlier argument was evaluated.

Copy earlier CV arguments before compiling a later expression that may have side effects. The common variable, literal, and constant argument paths remain unchanged.

This happens before the frameless opcode runs, so the __toString() re-entry protection proposed in #21815 does not cover it.

Includes tests for assignment, increment, and mutation through a nested call.

Fixes GH-22256

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant