Skip to content

Commit 3dba556

Browse files
committed
Tracing JIT: Fixed incorrect assumption about in-memeory zval type
1 parent 4568370 commit 3dba556

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5924,7 +5924,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
59245924
}
59255925
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var), type,
59265926
(type == IS_UNKNOWN || !ra ||
5927-
(!ra[ssa_op->op1_def] && !ssa->vars[ssa_op->op1_def].no_val)));
5927+
(!ra[ssa_op->op1_def] &&
5928+
(opline->opcode == ZEND_ASSIGN || !ssa->vars[ssa_op->op1_def].no_val))));
59285929
if (type != IS_UNKNOWN) {
59295930
ssa->var_info[ssa_op->op1_def].type &= ~MAY_BE_GUARD;
59305931
if (ra && ra[ssa_op->op1_def]) {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
--TEST--
2+
JIT ASSIGN: incorrect assumption about in-memeory zval type
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+
--FILE--
10+
<?php
11+
function test() {
12+
$a = null;
13+
for ($i = 0; $i < 6; $i++) {
14+
var_dump($a);
15+
$a = $a + $a = +$a = $b;
16+
}
17+
}
18+
test();
19+
?>
20+
--EXPECTF--
21+
NULL
22+
23+
Warning: Undefined variable $b in %sassign_046.php on line 6
24+
int(0)
25+
26+
Warning: Undefined variable $b in %sassign_046.php on line 6
27+
int(0)
28+
29+
Warning: Undefined variable $b in %sassign_046.php on line 6
30+
int(0)
31+
32+
Warning: Undefined variable $b in %sassign_046.php on line 6
33+
int(0)
34+
35+
Warning: Undefined variable $b in %sassign_046.php on line 6
36+
int(0)
37+
38+
Warning: Undefined variable $b in %sassign_046.php on line 6

0 commit comments

Comments
 (0)