summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2018-10-25 16:31:10 +0200
committerNikita Popov <nikita.ppv@gmail.com>2018-10-25 16:44:24 +0200
commitb9431ef4d5c07c19cd141fdb430e3fd763db257c (patch)
treeae3acc8a3727f9a714b3dca19580a0a31fa779d5
parent78c2e0e34299499af2d0cfec3dde7aaf5c48206c (diff)
downloadphp-git-b9431ef4d5c07c19cd141fdb430e3fd763db257c.tar.gz
Don't optimize function if inference failed
This was respected only for the single-function optimizations, not in func-info mode.
-rw-r--r--ext/opcache/Optimizer/zend_optimizer.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c
index 3904a6d35a..bdfd52d8d1 100644
--- a/ext/opcache/Optimizer/zend_optimizer.c
+++ b/ext/opcache/Optimizer/zend_optimizer.c
@@ -1488,8 +1488,11 @@ int zend_optimize_script(zend_script *script, zend_long optimization_level, zend
for (i = 0; i < call_graph.op_arrays_count; i++) {
func_info = ZEND_FUNC_INFO(call_graph.op_arrays[i]);
if (func_info) {
- zend_dfa_analyze_op_array(call_graph.op_arrays[i], &ctx, &func_info->ssa);
- func_info->flags = func_info->ssa.cfg.flags;
+ if (zend_dfa_analyze_op_array(call_graph.op_arrays[i], &ctx, &func_info->ssa) == SUCCESS) {
+ func_info->flags = func_info->ssa.cfg.flags;
+ } else {
+ ZEND_SET_FUNC_INFO(call_graph.op_arrays[i], NULL);
+ }
}
}