Skip to content

Commit b8866a5

Browse files
committed
Merge branch 'PHP-7.4'
2 parents 93ee216 + 4a98f42 commit b8866a5

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

ext/opcache/Optimizer/zend_inference.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2102,7 +2102,6 @@ static uint32_t assign_dim_result_type(
21022102
tmp |= MAY_BE_RC1 | MAY_BE_RCN;
21032103
}
21042104
if (tmp & MAY_BE_ARRAY) {
2105-
tmp |= (value_type & MAY_BE_ANY) << MAY_BE_ARRAY_SHIFT;
21062105
if (value_type & MAY_BE_UNDEF) {
21072106
tmp |= MAY_BE_ARRAY_OF_NULL;
21082107
}
@@ -2123,6 +2122,11 @@ static uint32_t assign_dim_result_type(
21232122
tmp |= MAY_BE_ARRAY_KEY_STRING;
21242123
}
21252124
}
2125+
/* Only add value type if we have a key type. It might be that the key type is illegal
2126+
* for arrays. */
2127+
if (tmp & MAY_BE_ARRAY_KEY_ANY) {
2128+
tmp |= (value_type & MAY_BE_ANY) << MAY_BE_ARRAY_SHIFT;
2129+
}
21262130
}
21272131
return tmp;
21282132
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
Don't add array value type is key type is illegal
3+
--FILE--
4+
<?php
5+
6+
function test(\SplObjectStorage $definitions = null) {
7+
$argument = new stdClass;
8+
$definitions[$argument] = 1;
9+
$definitions[$argument] += 1;
10+
$argument = [];
11+
$definitions[$argument] = 1;
12+
$definitions[$argument] += 1;
13+
}
14+
15+
?>
16+
===DONE===
17+
--EXPECT--
18+
===DONE===

0 commit comments

Comments
 (0)