Skip to content

Commit ace00fa

Browse files
committed
Merge branch 'PHP-8.1'
* PHP-8.1: Disable ASSIGN optimization for values inferred for fatal errors.
2 parents 529f9f8 + 7e8257f commit ace00fa

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

Zend/Optimizer/dfa_pass.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1304,6 +1304,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
13041304

13051305
if (src_var >= 0
13061306
&& !(ssa->var_info[src_var].type & MAY_BE_REF)
1307+
&& (ssa->var_info[src_var].type & (MAY_BE_UNDEF|MAY_BE_ANY))
13071308
&& ssa->vars[src_var].definition >= 0
13081309
&& ssa->ops[ssa->vars[src_var].definition].result_def == src_var
13091310
&& ssa->ops[ssa->vars[src_var].definition].result_use < 0
@@ -1463,6 +1464,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
14631464
if ((opline->op2_type & (IS_TMP_VAR|IS_VAR))
14641465
&& src_var >= 0
14651466
&& !(ssa->var_info[src_var].type & MAY_BE_REF)
1467+
&& (ssa->var_info[src_var].type & (MAY_BE_UNDEF|MAY_BE_ANY))
14661468
&& ssa->vars[src_var].definition >= 0
14671469
&& ssa->ops[ssa->vars[src_var].definition].result_def == src_var
14681470
&& ssa->ops[ssa->vars[src_var].definition].result_use < 0

ext/opcache/tests/jit/assign_051.phpt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
JIT ASSIGN: incorrect assignment optimization
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+
function foo(int $a) {
12+
$arr = $a[] = (y);
13+
$arr = y;
14+
$c = $y = $arr = &y($c);
15+
}
16+
foo(0);
17+
?>
18+
--EXPECTF--
19+
Fatal error: Uncaught Error: Undefined constant "y" in %sassign_051.php:3
20+
Stack trace:
21+
#0 %sassign_051.php(7): foo(0)
22+
#1 {main}
23+
thrown in %sassign_051.php on line 3

0 commit comments

Comments
 (0)