mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Disable ASSIGN optimization for values inferred for fatal errors.
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
23
ext/opcache/tests/jit/assign_051.phpt
Normal file
23
ext/opcache/tests/jit/assign_051.phpt
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user