Skip to content

Commit 2cfb09c

Browse files
committed
Fix inference warning about missing key type
1 parent 5388143 commit 2cfb09c

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
@@ -2093,7 +2093,6 @@ static uint32_t assign_dim_result_type(
20932093
tmp |= MAY_BE_RC1 | MAY_BE_RCN;
20942094
}
20952095
if (tmp & MAY_BE_ARRAY) {
2096-
tmp |= (value_type & MAY_BE_ANY) << MAY_BE_ARRAY_SHIFT;
20972096
if (value_type & MAY_BE_UNDEF) {
20982097
tmp |= MAY_BE_ARRAY_OF_NULL;
20992098
}
@@ -2114,6 +2113,11 @@ static uint32_t assign_dim_result_type(
21142113
tmp |= MAY_BE_ARRAY_KEY_STRING;
21152114
}
21162115
}
2116+
/* Only add value type if we have a key type. It might be that the key type is illegal
2117+
* for arrays. */
2118+
if (tmp & MAY_BE_ARRAY_KEY_ANY) {
2119+
tmp |= (value_type & MAY_BE_ANY) << MAY_BE_ARRAY_SHIFT;
2120+
}
21172121
}
21182122
return tmp;
21192123
}
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)