An empty array will not be turned into an array of references.
This violated the invariant than an array has values iff it has
keys.
tmp = t1;
if (t1 & MAY_BE_ARRAY) {
tmp |= MAY_BE_RC1 | MAY_BE_RCN;
- /* SEND_UNPACK may acquire references into the array */
- tmp |= MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+ if (t1 & MAY_BE_ARRAY_OF_ANY) {
+ /* SEND_UNPACK may acquire references into the array */
+ tmp |= MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+ }
}
if (t1 & MAY_BE_OBJECT) {
tmp |= MAY_BE_RC1 | MAY_BE_RCN;
--- /dev/null
+--TEST--
+Type inference of SEND_UNPACK with empty array
+--FILE--
+<?php
+function test() {
+ $array = [1, 2, 3];
+ $values = [];
+ var_dump(array_push($array, 4, ...$values));
+ var_dump($array);
+}
+test();
+?>
+--EXPECT--
+int(4)
+array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+}