Skip to content

Commit

Permalink
Disable ASSIGN optimization for values inferred for fatal errors.
Browse files Browse the repository at this point in the history
  • Loading branch information
dstogov committed Feb 18, 2022
1 parent 90ca8f9 commit 7e8257f
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Zend/Optimizer/dfa_pass.c
Original file line number Diff line number Diff line change
Expand Up @@ -1356,6 +1356,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx

if (src_var >= 0
&& !(ssa->var_info[src_var].type & MAY_BE_REF)
&& (ssa->var_info[src_var].type & (MAY_BE_UNDEF|MAY_BE_ANY))
&& ssa->vars[src_var].definition >= 0
&& ssa->ops[ssa->vars[src_var].definition].result_def == src_var
&& ssa->ops[ssa->vars[src_var].definition].result_use < 0
Expand Down Expand Up @@ -1513,6 +1514,7 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
if ((opline->op2_type & (IS_TMP_VAR|IS_VAR))
&& src_var >= 0
&& !(ssa->var_info[src_var].type & MAY_BE_REF)
&& (ssa->var_info[src_var].type & (MAY_BE_UNDEF|MAY_BE_ANY))
&& ssa->vars[src_var].definition >= 0
&& ssa->ops[ssa->vars[src_var].definition].result_def == src_var
&& ssa->ops[ssa->vars[src_var].definition].result_use < 0
Expand Down
23 changes: 23 additions & 0 deletions ext/opcache/tests/jit/assign_051.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
--TEST--
JIT ASSIGN: incorrect assignment optimization
--INI--
opcache.enable=1
opcache.enable_cli=1
opcache.file_update_protection=0
opcache.jit_buffer_size=1M
opcache.protect_memory=1
--FILE--
<?php
function foo(int $a) {
$arr = $a[] = (y);
$arr = y;
$c = $y = $arr = &y($c);
}
foo(0);
?>
--EXPECTF--
Fatal error: Uncaught Error: Undefined constant "y" in %sassign_051.php:3
Stack trace:
#0 %sassign_051.php(7): foo(0)
#1 {main}
thrown in %sassign_051.php on line 3

0 comments on commit 7e8257f

Please sign in to comment.