Skip to content

Commit 9e6eb9d

Browse files
committed
Merge branch 'PHP-8.1'
* PHP-8.1: Fix type narrowing warning during type inference of ZEND_FETCH_DIM_W
2 parents 619f40f + 2cff0e6 commit 9e6eb9d

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

Zend/Optimizer/zend_inference.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3355,11 +3355,12 @@ static zend_always_inline zend_result _zend_update_type_info(
33553355
ZEND_ASSERT(j < 0 && "There should only be one use");
33563356
}
33573357
}
3358-
if ((tmp & MAY_BE_ARRAY) && (tmp & MAY_BE_ARRAY_KEY_ANY)) {
3358+
if (((tmp & MAY_BE_ARRAY) && (tmp & MAY_BE_ARRAY_KEY_ANY)) || opline->opcode == ZEND_FETCH_DIM_FUNC_ARG) {
33593359
UPDATE_SSA_TYPE(tmp, ssa_op->op1_def);
33603360
} else {
33613361
/* invalid key type */
3362-
tmp = (tmp & (MAY_BE_RC1|MAY_BE_RCN)) | (t1 & ~(MAY_BE_RC1|MAY_BE_RCN));
3362+
tmp = (tmp & (MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ARRAY)) |
3363+
(t1 & ~(MAY_BE_RC1|MAY_BE_RCN|MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE));
33633364
UPDATE_SSA_TYPE(tmp, ssa_op->op1_def);
33643365
}
33653366
COPY_SSA_OBJ_TYPE(ssa_op->op1_use, ssa_op->op1_def);
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
Type inference 004: Type narrowing warning during type inference of ZEND_FETCH_DIM_W
3+
--INI--
4+
opcache.enable=1
5+
opcache.enable_cli=1
6+
opcache.optimization_level=-1
7+
--FILE--
8+
<?php
9+
function y() {
10+
for(;;){
11+
$arr[]->y = c;
12+
$arr = c;
13+
}
14+
}
15+
?>
16+
DONE
17+
--EXPECT--
18+
DONE

0 commit comments

Comments
 (0)