Skip to content

Commit fc0cfd1

Browse files
committed
Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0: JIT: Fixed warning when assign undefined variable to property
2 parents e5541c9 + 04209de commit fc0cfd1

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

ext/opcache/jit/zend_jit_arm64.dasc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5543,6 +5543,28 @@ static int zend_jit_assign_to_variable_call(dasm_State **Dst,
55435543
zend_jit_addr __res_addr,
55445544
bool __check_exception)
55455545
{
5546+
if (val_info & MAY_BE_UNDEF) {
5547+
if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) {
5548+
int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM);
5549+
const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point);
5550+
5551+
if (!exit_addr) {
5552+
return 0;
5553+
}
5554+
5555+
| IF_ZVAL_TYPE val_addr, IS_UNDEF, &exit_addr, ZREG_TMP1
5556+
} else {
5557+
| IF_ZVAL_TYPE val_addr, IS_UNDEF, >1, ZREG_TMP1
5558+
|.cold_code
5559+
|1:
5560+
| SET_EX_OPLINE opline, REG0
5561+
| LOAD_32BIT_VAL FCARG1w, Z_OFFSET(val_addr)
5562+
| EXT_CALL zend_jit_undefined_op_helper, REG0
5563+
| b >1
5564+
|.code
5565+
|1:
5566+
}
5567+
}
55465568
if (Z_MODE(var_addr) != IS_MEM_ZVAL || Z_REG(var_addr) != ZREG_FCARG1 || Z_OFFSET(var_addr) != 0) {
55475569
| LOAD_ZVAL_ADDR FCARG1x, var_addr
55485570
}

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6018,6 +6018,28 @@ static int zend_jit_assign_to_variable_call(dasm_State **Dst,
60186018
zend_jit_addr __res_addr,
60196019
bool __check_exception)
60206020
{
6021+
if (val_info & MAY_BE_UNDEF) {
6022+
if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) {
6023+
int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM);
6024+
const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point);
6025+
6026+
if (!exit_addr) {
6027+
return 0;
6028+
}
6029+
6030+
| IF_ZVAL_TYPE val_addr, IS_UNDEF, &exit_addr
6031+
} else {
6032+
| IF_ZVAL_TYPE val_addr, IS_UNDEF, >1
6033+
|.cold_code
6034+
|1:
6035+
| SET_EX_OPLINE opline, r0
6036+
| mov FCARG1d, Z_OFFSET(val_addr)
6037+
| EXT_CALL zend_jit_undefined_op_helper, r0
6038+
| jmp >1
6039+
|.code
6040+
|1:
6041+
}
6042+
}
60216043
if (Z_MODE(var_addr) != IS_MEM_ZVAL || Z_REG(var_addr) != ZREG_FCARG1 || Z_OFFSET(var_addr) != 0) {
60226044
| LOAD_ZVAL_ADDR FCARG1a, var_addr
60236045
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
JIT ASSIGN_OBJ: Assign undefined vatiable to property
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.jit=function
9+
--FILE--
10+
<?php
11+
class Test {
12+
public $prop;
13+
}
14+
function test() {
15+
$o = new Test;
16+
$o->prop = $undef;
17+
}
18+
test();
19+
?>
20+
DONE
21+
--EXPECTF--
22+
Warning: Undefined variable $undef in %sassign_obj_002.php on line 7
23+
DONE

0 commit comments

Comments
 (0)