diff --git a/Zend/Optimizer/zend_optimizer.c b/Zend/Optimizer/zend_optimizer.c index 603e9e8d399..0f1453cfdb4 100644 --- a/Zend/Optimizer/zend_optimizer.c +++ b/Zend/Optimizer/zend_optimizer.c @@ -539,17 +539,6 @@ bool zend_optimizer_replace_by_const(zend_op_array *op_array, if (opline->op1_type == type && opline->op1.var == var) { switch (opline->opcode) { - case ZEND_SEND_VAR_EX: - case ZEND_SEND_FUNC_ARG: - opline->extended_value = 0; - opline->opcode = ZEND_SEND_VAL_EX; - break; - case ZEND_SEND_VAR_NO_REF_EX: - opline->opcode = ZEND_SEND_VAL; - break; - case ZEND_SEND_USER: - opline->opcode = ZEND_SEND_VAL_EX; - break; /* In most cases IS_TMP_VAR operand may be used only once. * The operands are usually destroyed by the opcode handler. * However, there are some exception which keep the operand alive. In that case diff --git a/Zend/tests/by_ref_optimization.phpt b/Zend/tests/by_ref_optimization.phpt new file mode 100644 index 00000000000..02431b6cbea --- /dev/null +++ b/Zend/tests/by_ref_optimization.phpt @@ -0,0 +1,19 @@ +--TEST-- +Don't optimize send opcodes that differ in by-ref behavior +--FILE-- + +--EXPECTF-- +Warning: ref(): Argument #1 ($x) must be passed by reference, value given in %s on line %d +bool(true) + +Notice: Only variables should be passed by reference in %s on line %d +bool(true)