Skip to content

Commit b46ee53

Browse files
committed
Merge branch 'PHP-8.2' into PHP-8.3
* PHP-8.2: Fixed incorrect elimination of refcounted check in JIT for BIND_GLOBAL
2 parents dcef703 + c67f6f4 commit b46ee53

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

Diff for: ext/opcache/jit/zend_jit_arm64.dasc

+3-3
Original file line numberDiff line numberDiff line change
@@ -11792,7 +11792,7 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_
1179211792
| GC_ADDREF REG0, TMP1w
1179311793
|1:
1179411794
if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) {
11795-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
11795+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1179611796
| // if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr)))
1179711797
| IF_ZVAL_REFCOUNTED op1_addr, >2, ZREG_TMP1, ZREG_TMP2
1179811798
|.cold_code
@@ -11819,12 +11819,12 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_
1181911819
| EXT_CALL gc_possible_root, REG0
1182011820
| b >5
1182111821
}
11822-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
11822+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1182311823
|.code
1182411824
}
1182511825
}
1182611826

11827-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
11827+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1182811828
| // ZVAL_REF(variable_ptr, ref)
1182911829
| SET_ZVAL_PTR op1_addr, REG0, TMP1
1183011830
| SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX, TMP1w, TMP2

Diff for: ext/opcache/jit/zend_jit_x86.dasc

+3-3
Original file line numberDiff line numberDiff line change
@@ -12556,7 +12556,7 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_
1255612556
| GC_ADDREF r0
1255712557
|1:
1255812558
if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) {
12559-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
12559+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1256012560
| // if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr)))
1256112561
| IF_ZVAL_REFCOUNTED op1_addr, >2
1256212562
|.cold_code
@@ -12583,12 +12583,12 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_
1258312583
| EXT_CALL gc_possible_root, r1
1258412584
| jmp >5
1258512585
}
12586-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
12586+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1258712587
|.code
1258812588
}
1258912589
}
1259012590

12591-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
12591+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1259212592
| // ZVAL_REF(variable_ptr, ref)
1259312593
| SET_ZVAL_PTR op1_addr, r0
1259412594
| SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX

Diff for: ext/opcache/tests/jit/bind_global_001.phpt

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
Bind global and immutable string
3+
--INI--
4+
opcache.enable=1
5+
opcache.enable_cli=1
6+
opcache.file_update_protection=0
7+
opcache.jit_buffer_size=1M
8+
--FILE--
9+
<?php
10+
function foo($a = '') {
11+
global $a;
12+
}
13+
foo();
14+
var_dump($a);
15+
?>
16+
--EXPECT--
17+
NULL

0 commit comments

Comments
 (0)