Skip to content

Commit 97da90e

Browse files
committed
Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0: JIT: Fixed missed zval type initialization
2 parents 7981d48 + 9ce388b commit 97da90e

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

ext/opcache/jit/zend_jit_arm64.dasc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12748,15 +12748,19 @@ static int zend_jit_incdec_obj(dasm_State **Dst,
1274812748
uint64_t val = 0x43e0000000000000;
1274912749
| LOAD_64BIT_VAL REG0, val
1275012750
| SET_ZVAL_LVAL_FROM_REG var_addr, REG0, TMP1
12751+
| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE, TMP1w, TMP2
1275112752
if (opline->opcode == ZEND_PRE_INC_OBJ && opline->result_type != IS_UNUSED) {
1275212753
| SET_ZVAL_LVAL_FROM_REG res_addr, REG0, TMP1
12754+
| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE, TMP1w, TMP2
1275312755
}
1275412756
} else {
1275512757
uint64_t val = 0xc3e0000000000000;
1275612758
| LOAD_64BIT_VAL REG0, val
1275712759
| SET_ZVAL_LVAL_FROM_REG var_addr, REG0, TMP1
12760+
| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE, TMP1w, TMP2
1275812761
if (opline->opcode == ZEND_PRE_DEC_OBJ && opline->result_type != IS_UNUSED) {
1275912762
| SET_ZVAL_LVAL_FROM_REG res_addr, REG0, TMP1
12763+
| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE, TMP1w, TMP2
1276012764
}
1276112765
}
1276212766
| b >4

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13456,31 +13456,39 @@ static int zend_jit_incdec_obj(dasm_State **Dst,
1345613456
|.if X64
1345713457
| mov64 rax, 0x43e0000000000000
1345813458
| SET_ZVAL_LVAL var_addr, rax
13459+
| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE
1345913460
if (opline->opcode == ZEND_PRE_INC_OBJ && opline->result_type != IS_UNUSED) {
1346013461
| SET_ZVAL_LVAL res_addr, rax
13462+
| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE
1346113463
}
1346213464
|.else
1346313465
| SET_ZVAL_LVAL var_addr, 0
1346413466
| SET_ZVAL_W2 var_addr, 0x41e00000
13467+
| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE
1346513468
if (opline->opcode == ZEND_PRE_INC_OBJ && opline->result_type != IS_UNUSED) {
1346613469
| SET_ZVAL_LVAL res_addr, 0
1346713470
| SET_ZVAL_W2 res_addr, 0x41e00000
13471+
| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE
1346813472
}
1346913473
|.endif
1347013474
} else {
1347113475
|.if X64
1347213476
| mov64 rax, 0xc3e0000000000000
1347313477
| SET_ZVAL_LVAL var_addr, rax
13478+
| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE
1347413479
if (opline->opcode == ZEND_PRE_DEC_OBJ && opline->result_type != IS_UNUSED) {
1347513480
| SET_ZVAL_LVAL res_addr, rax
13481+
| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE
1347613482
}
1347713483
|.else
1347813484
| SET_ZVAL_LVAL var_addr, 0x00200000
1347913485
| SET_ZVAL_W2 var_addr, 0xc1e00000
13486+
| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE
1348013487
if (opline->opcode == ZEND_PRE_DEC_OBJ && opline->result_type != IS_UNUSED) {
1348113488
| SET_ZVAL_LVAL res_addr, 0x00200000
1348213489
| SET_ZVAL_W2 res_addr, 0xc1e00000
13483-
}
13490+
| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE
13491+
}
1348413492
|.endif
1348513493
}
1348613494
| jmp >4
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
--TEST--
2+
PRE_INC_OBJ: 001
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.jit=function
10+
--FILE--
11+
<?php
12+
class Test {
13+
public $prop;
14+
function foo() {
15+
$this->prop = PHP_INT_MAX - 5;
16+
for ($i = 0; $i < 10; $i++) {
17+
var_dump(++$this->prop);
18+
}
19+
}
20+
}
21+
22+
$test = new Test;
23+
$test->foo();
24+
?>
25+
--EXPECTF--
26+
int(%d)
27+
int(%d)
28+
int(%d)
29+
int(%d)
30+
int(%d)
31+
float(%f)
32+
float(%f)
33+
float(%f)
34+
float(%f)
35+
float(%f)

0 commit comments

Comments
 (0)