summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2016-01-22 13:30:34 +0300
committerDmitry Stogov <dmitry@zend.com>2016-01-22 13:30:34 +0300
commit79071fe227cdd64799c1b0aa31425b85a503a42f (patch)
treed1a47232916f2653ddb0793abdc373f7c31a4eff
parent0df9b514799aeafdae2b5d1a8aac7ccb9ca31dd4 (diff)
downloadphp-git-79071fe227cdd64799c1b0aa31425b85a503a42f.tar.gz
Added optimization constraint (don't optimize result of NEW, because constructor may throw exception)
-rw-r--r--ext/opcache/Optimizer/dfa_pass.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/ext/opcache/Optimizer/dfa_pass.c b/ext/opcache/Optimizer/dfa_pass.c
index 02dfdd5b7e..7c71e535b4 100644
--- a/ext/opcache/Optimizer/dfa_pass.c
+++ b/ext/opcache/Optimizer/dfa_pass.c
@@ -155,6 +155,8 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
&& ssa->ops[op2].op2_use_chain < 0
&& !ssa->vars[var1].phi_use_chain
&& !ssa->vars[var1].sym_use_chain
+ /* see Zend/tests/generators/aborted_yield_during_new.phpt */
+ && op_array->opcodes[ssa->vars[var1].definition].opcode != ZEND_NEW
) {
int op1 = ssa->vars[var1].definition;
int var3 = i;