Skip to content

array_multisort(): allow inline array literals by reference (#12017) - #12023

Merged
PurHur merged 1 commit into
masterfrom
agent/issue-12017-array-multisort-inline-array
Jun 26, 2026
Merged

PurHur merged 1 commit into
masterfrom
agent/issue-12017-array-multisort-inline-array

Conversation

@PurHur

@PurHur PurHur commented Jun 26, 2026

Copy link
Copy Markdown
Owner

Summary

  • array_multisort([1,2], …) and multi-array inline literals now succeed like Zend — ephemeral array operands are allowed for variadic by-ref slots.
  • sort([1,2]) and other array mutators still reject inline literals.

Closes #12017

php-src reference

  • ext/standard/array.c — php_array_multisort inline array materialization
  • Zend/zend_compile.c — ZEND_SEND_REF temp for inline arrays

PHP implementation

  • lib/VM/ReferencableCheck.php — allowsEphemeralArrayLiteralByRef('array_multisort')
  • lib/JIT.php — variadic by-ref JIT guard parity

Verification

./script/docker-exec.sh -- bash -lc 'php bin/vm.php test/repro/maintainer_gap_array_multisort_inline_array_flags.php'
# ok

./script/docker-exec.sh -- bash -lc 'php bin/vm.php test/repro/maintainer_gap_array_multisort_two_inline_arrays.php'
# ok

./script/docker-exec.sh -- bash -lc './vendor/bin/phpunit --filter array_multisort_inline_array'
# OK (4 tests)

./script/docker-exec.sh -- bash -lc 'php bin/compile.php -l test/fixtures/aot/compile-only/array_multisort_inline_array.php'
# (no output — lint ok)

Made with Cursor

Zend materializes ephemeral array operands for array_multisort() variadic
by-ref slots. Extend ReferencableCheck + JIT by-ref guards; sort() etc.
unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur merged commit bcedfbf into master Jun 26, 2026
@PurHur
PurHur deleted the agent/issue-12017-array-multisort-inline-array branch June 26, 2026 08:36
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: array_multisort() inline non-empty array literal — by-ref Error not Zend success (ext/standard/array.c)

1 participant