From: Nikita Popov Date: Thu, 10 Nov 2016 21:18:42 +0000 (+0100) Subject: Merge branch 'PHP-7.0' into PHP-7.1 X-Git-Tag: php-7.2.0alpha1~957^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=62af7e0db89a18bb9ff61589fb91cb7a718c1820;p=php Merge branch 'PHP-7.0' into PHP-7.1 --- 62af7e0db89a18bb9ff61589fb91cb7a718c1820 diff --cc ext/opcache/Optimizer/optimize_func_calls.c index f98149a09e,ccac5b9fbc..6f267df9b3 --- a/ext/opcache/Optimizer/optimize_func_calls.c +++ b/ext/opcache/Optimizer/optimize_func_calls.c @@@ -216,18 -110,17 +216,26 @@@ void zend_optimize_func_calls(zend_op_a if (call_stack[call - 1].func) { if (ARG_SHOULD_BE_SENT_BY_REF(call_stack[call - 1].func, (opline->extended_value & ZEND_FETCH_ARG_MASK))) { opline->extended_value &= ZEND_FETCH_TYPE_MASK; - opline->opcode -= 9; + if (opline->opcode != ZEND_FETCH_STATIC_PROP_FUNC_ARG) { + opline->opcode -= 9; + } else { + opline->opcode = ZEND_FETCH_STATIC_PROP_W; + } } else { + if (opline->opcode == ZEND_FETCH_DIM_FUNC_ARG + && opline->op2_type == IS_UNUSED) { + /* FETCH_DIM_FUNC_ARG supports UNUSED op2, while FETCH_DIM_R does not. + * Performing the replacement would create an invalid opcode. */ ++ call_stack[call - 1].try_inline = 0; + break; + } + opline->extended_value &= ZEND_FETCH_TYPE_MASK; - opline->opcode -= 12; + if (opline->opcode != ZEND_FETCH_STATIC_PROP_FUNC_ARG) { + opline->opcode -= 12; + } else { + opline->opcode = ZEND_FETCH_STATIC_PROP_R; + } } } break;