Skip to content

Commit 4511954

Browse files
committed
Merge branch 'PHP-8.3'
* PHP-8.3: Fixed incorrect elimination of refcounted check in JIT for BIND_GLOBAL
2 parents 41a7265 + b46ee53 commit 4511954

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

ext/opcache/jit/zend_jit_ir.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10915,7 +10915,7 @@ static int zend_jit_bind_global(zend_jit_ctx *jit, const zend_op *opline, uint32
1091510915
if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) {
1091610916
ir_ref if_refcounted = IR_UNUSED, refcount, if_non_zero, if_may_not_leak;
1091710917

10918-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
10918+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1091910919
// JIT: if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr)))
1092010920
if_refcounted = jit_if_REFCOUNTED(jit, op1_addr);
1092110921
ir_IF_TRUE_cold(if_refcounted);
@@ -10949,13 +10949,13 @@ static int zend_jit_bind_global(zend_jit_ctx *jit, const zend_op *opline, uint32
1094910949
ir_IF_FALSE(if_may_not_leak);
1095010950
ir_CALL_1(IR_VOID, ir_CONST_FC_FUNC(gc_possible_root), ref2);
1095110951
}
10952-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
10952+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1095310953
ir_END_list(end_inputs);
1095410954
ir_IF_FALSE(if_refcounted);
1095510955
}
1095610956
}
1095710957

10958-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
10958+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1095910959
// JIT: ZVAL_REF(variable_ptr, ref)
1096010960
jit_set_Z_PTR(jit, op1_addr, ref);
1096110961
jit_set_Z_TYPE_INFO(jit, op1_addr, IS_REFERENCE_EX);
Lines changed: 17 additions & 0 deletions
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)