Category
Regression · php-src-strict · AOT / SPL iterators
Problem
CallbackFilterIterator over an ArrayIterator with an evenness predicate returns 2,4 on Zend/VM/JIT. AOT builds but prints an empty string (no elements). Prior CallbackFilter work (#6692, #19771) closed VM/JIT/nested-new paths; AOT iteration still diverges on master (b3f4d02a5, 2026-08-03).
| Repro |
Zend 8.2 |
VM / JIT |
AOT (2026-08-03) |
CallbackFilterIterator(ArrayIterator([1,2,3,4]), fn($v)=>$v%2===0) via iterator_to_array |
2,4 |
2,4 |
(empty) |
php-src reference
PHP implementation target
ext/spl/ CallbackFilterIterator accept/next lowering for AOT — ensure user callable is invoked during AOT foreach/iterator_to_array; PHP-in-PHP only
Repro
./script/docker-exec.sh -- bash -lc 'cat >/tmp/cfi.php <<'"'"'P'"'"'
<?php
$a = new ArrayIterator([1, 2, 3, 4]);
$f = new CallbackFilterIterator($a, fn($v) => $v % 2 === 0);
echo implode(",", iterator_to_array($f)), "\n";
P
php /tmp/cfi.php
php bin/vm.php /tmp/cfi.php
php bin/jit.php /tmp/cfi.php 2>/dev/null
./phpc build -o /tmp/cfi.bin /tmp/cfi.php && /tmp/cfi.bin'
Done when
Category
Regression· php-src-strict · AOT / SPL iteratorsProblem
CallbackFilterIteratorover anArrayIteratorwith an evenness predicate returns2,4on Zend/VM/JIT. AOT builds but prints an empty string (no elements). Prior CallbackFilter work (#6692, #19771) closed VM/JIT/nested-new paths; AOT iteration still diverges on master (b3f4d02a5, 2026-08-03).CallbackFilterIterator(ArrayIterator([1,2,3,4]), fn($v)=>$v%2===0)viaiterator_to_array2,42,4php-src reference
ext/spl/spl_iterators.c—CallbackFilterIteratorPHP implementation target
ext/spl/CallbackFilterIterator accept/next lowering for AOT — ensure user callable is invoked during AOT foreach/iterator_to_array; PHP-in-PHP onlyRepro
Done when
2,4)