Skip to content

Commit 962aac6

Browse files
committed
Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1: Tracing JIT: Fixed incorrect code generation fofr SEND-ing of result of ASSIGN to typed reference
2 parents c4f56c5 + 8a749c7 commit 962aac6

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

ext/opcache/jit/zend_jit_trace.c

+8
Original file line numberDiff line numberDiff line change
@@ -4990,6 +4990,14 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
49904990
res_addr = 0;
49914991
} else {
49924992
res_addr = RES_REG_ADDR();
4993+
if (Z_MODE(res_addr) != IS_REG
4994+
&& zend_jit_trace_next_is_send_result(opline, p, frame)) {
4995+
send_result = 1;
4996+
res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, (opline+1)->result.var);
4997+
if (!zend_jit_reuse_ip(&dasm_state)) {
4998+
goto jit_failure;
4999+
}
5000+
}
49935001
}
49945002
if (!zend_jit_assign_to_typed_ref(&dasm_state, opline, opline->op2_type, op2_addr, res_addr, 1)) {
49955003
goto jit_failure;

ext/opcache/tests/jit/assign_056.phpt

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
--TEST--
2+
JIT ASSIGN: ASSING+SEND and typed reference
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+
class Test {
12+
static ?Test $test;
13+
}
14+
15+
$a = new Test;
16+
Test::$test = &$a;
17+
var_dump($a = new Test);
18+
?>
19+
--EXPECT--
20+
object(Test)#2 (0) {
21+
}

0 commit comments

Comments
 (0)