diff options
author | Dmitry Stogov <dmitry@zend.com> | 2018-02-05 19:40:06 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2018-02-05 19:40:06 +0300 |
commit | 3a794d39f081f73b2204aed8b80163a197ab41c3 (patch) | |
tree | 90af4978f502d85b1a1ac1e1e72ebeaf9e65d6bc /ext/opcache/Optimizer/zend_inference.c | |
parent | 7416562ab0c1062722c43c6b55d38e1a79f217cb (diff) | |
download | php-git-3a794d39f081f73b2204aed8b80163a197ab41c3.tar.gz |
Avoid repeatable ARG_SHOULD_BE_SENT_BY_REF() checks in FETCH_*FUNC_ARG and following SEND_VAR_EX. Perform the check once in a new CHECK_FUNC_ARG opcode and reuse in the following FETCH_*FUNC_ARG and SEND_FUNC_ARG (SEND_VAR_EX replacement).
Diffstat (limited to 'ext/opcache/Optimizer/zend_inference.c')
-rw-r--r-- | ext/opcache/Optimizer/zend_inference.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index fef99bc053..26ef8b82a9 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -2721,6 +2721,7 @@ static int zend_update_type_info(const zend_op_array *op_array, } break; case ZEND_SEND_VAR_EX: + case ZEND_SEND_FUNC_ARG: if (ssa_ops[i].op1_def >= 0) { tmp = (t1 & MAY_BE_UNDEF)|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF; UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def); @@ -3093,6 +3094,7 @@ static int zend_update_type_info(const zend_op_array *op_array, tmp |= MAY_BE_ARRAY_OF_OBJECT; break; case ZEND_SEND_VAR_EX: + case ZEND_SEND_FUNC_ARG: case ZEND_SEND_VAR_NO_REF: case ZEND_SEND_VAR_NO_REF_EX: case ZEND_SEND_REF: @@ -4042,6 +4044,7 @@ int zend_may_throw(const zend_op *opline, zend_op_array *op_array, zend_ssa *ssa case ZEND_SEND_VAL_EX: case ZEND_SEND_VAR: case ZEND_SEND_VAR_EX: + case ZEND_SEND_FUNC_ARG: case ZEND_SEND_VAR_NO_REF: case ZEND_SEND_VAR_NO_REF_EX: case ZEND_SEND_REF: @@ -4091,6 +4094,7 @@ int zend_may_throw(const zend_op *opline, zend_op_array *op_array, zend_ssa *ssa case ZEND_SEND_VAL: case ZEND_SEND_REF: case ZEND_SEND_VAR_EX: + case ZEND_SEND_FUNC_ARG: case ZEND_FREE: case ZEND_SEPARATE: case ZEND_TYPE_CHECK: |