Skip to content

Commit 88cb659

Browse files
committed
Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0: JIT: Fix incorrect type store elimination
2 parents 5910e1d + 6630603 commit 88cb659

File tree

2 files changed

+50
-9
lines changed

2 files changed

+50
-9
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4852,15 +4852,13 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
48524852
op2_info = OP2_INFO();
48534853
CHECK_OP2_TRACE_TYPE();
48544854
op1_info = OP1_INFO();
4855-
if (ssa->vars[ssa_op->op1_use].no_val) {
4856-
if ((op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) == MAY_BE_LONG
4857-
|| (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) == MAY_BE_DOUBLE) {
4858-
if (STACK_MEM_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var)) != IS_LONG
4859-
&& STACK_MEM_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var)) != IS_DOUBLE) {
4860-
/* type may be not set */
4861-
op1_info |= MAY_BE_NULL;
4862-
}
4863-
}
4855+
if ((op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) == MAY_BE_LONG
4856+
|| (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) == MAY_BE_DOUBLE) {
4857+
if (STACK_MEM_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var)) != IS_LONG
4858+
&& STACK_MEM_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var)) != IS_DOUBLE) {
4859+
/* type may be not set */
4860+
op1_info |= MAY_BE_NULL;
4861+
}
48644862
}
48654863
op1_def_info = OP1_DEF_INFO();
48664864
if (op1_type != IS_UNKNOWN && (op1_info & MAY_BE_GUARD)) {

ext/opcache/tests/jit/assign_048.phpt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
--TEST--
2+
JIT ASSIGN: incorrect type store elimination
3+
--INI--
4+
opcache.enable=1
5+
opcache.enable_cli=1
6+
opcache.file_update_protection=0
7+
opcache.jit_buffer_size=1M
8+
opcache.protect_memory=1
9+
opcache.optimization_level=0x7FFEBFFF
10+
--FILE--
11+
<?php
12+
function test(){
13+
$j = 0;
14+
for($i=0; $i<10; $i++) {
15+
+$b = +$b = unserialize('');
16+
$y[] = 4;
17+
$a + ~$b = $j++;
18+
}
19+
}
20+
test();
21+
?>
22+
DONE
23+
--EXPECTF--
24+
Warning: Undefined variable $a in %sassign_048.php on line 7
25+
26+
Warning: Undefined variable $a in %sassign_048.php on line 7
27+
28+
Warning: Undefined variable $a in %sassign_048.php on line 7
29+
30+
Warning: Undefined variable $a in %sassign_048.php on line 7
31+
32+
Warning: Undefined variable $a in %sassign_048.php on line 7
33+
34+
Warning: Undefined variable $a in %sassign_048.php on line 7
35+
36+
Warning: Undefined variable $a in %sassign_048.php on line 7
37+
38+
Warning: Undefined variable $a in %sassign_048.php on line 7
39+
40+
Warning: Undefined variable $a in %sassign_048.php on line 7
41+
42+
Warning: Undefined variable $a in %sassign_048.php on line 7
43+
DONE

0 commit comments

Comments
 (0)