arg = GET_OP1_ZVAL_PTR(BP_VAR_R);
param = ZEND_CALL_VAR(EX(call), opline->result.var);
- if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
- zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
- opline->op2.num,
- EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
- EX(call)->func->common.scope ? "::" : "",
- ZSTR_VAL(EX(call)->func->common.function_name));
+ if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
+ if (UNEXPECTED(!Z_ISREF_P(arg))) {
+ if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
- if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
- OBJ_RELEASE((zend_object*)EX(call)->func->common.prototype);
- }
- if (Z_OBJ(EX(call)->This)) {
- OBJ_RELEASE(Z_OBJ(EX(call)->This));
- }
- ZVAL_UNDEF(param);
- EX(call)->func = (zend_function*)&zend_pass_function;
- EX(call)->called_scope = NULL;
- Z_OBJ(EX(call)->This) = NULL;
- ZEND_SET_CALL_INFO(EX(call), ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
+ zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
+ opline->op2.num,
+ EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
+ EX(call)->func->common.scope ? "::" : "",
+ ZSTR_VAL(EX(call)->func->common.function_name));
- FREE_OP1();
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
+ OBJ_RELEASE((zend_object*)EX(call)->func->common.prototype);
+ }
+ if (Z_OBJ(EX(call)->This)) {
+ OBJ_RELEASE(Z_OBJ(EX(call)->This));
+ }
+ ZVAL_UNDEF(param);
+ EX(call)->func = (zend_function*)&zend_pass_function;
+ EX(call)->called_scope = NULL;
+ Z_OBJ(EX(call)->This) = NULL;
+ ZEND_SET_CALL_INFO(EX(call), ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
+
+ FREE_OP1();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
+ }
} else {
if (Z_ISREF_P(arg) &&
!(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
arg = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
param = ZEND_CALL_VAR(EX(call), opline->result.var);
- if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
- zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
- opline->op2.num,
- EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
- EX(call)->func->common.scope ? "::" : "",
- ZSTR_VAL(EX(call)->func->common.function_name));
+ if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
+ if (UNEXPECTED(!Z_ISREF_P(arg))) {
+ if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
- if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
- OBJ_RELEASE((zend_object*)EX(call)->func->common.prototype);
- }
- if (Z_OBJ(EX(call)->This)) {
- OBJ_RELEASE(Z_OBJ(EX(call)->This));
- }
- ZVAL_UNDEF(param);
- EX(call)->func = (zend_function*)&zend_pass_function;
- EX(call)->called_scope = NULL;
- Z_OBJ(EX(call)->This) = NULL;
- ZEND_SET_CALL_INFO(EX(call), ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
+ zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
+ opline->op2.num,
+ EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
+ EX(call)->func->common.scope ? "::" : "",
+ ZSTR_VAL(EX(call)->func->common.function_name));
- zval_ptr_dtor_nogc(free_op1);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
+ OBJ_RELEASE((zend_object*)EX(call)->func->common.prototype);
+ }
+ if (Z_OBJ(EX(call)->This)) {
+ OBJ_RELEASE(Z_OBJ(EX(call)->This));
+ }
+ ZVAL_UNDEF(param);
+ EX(call)->func = (zend_function*)&zend_pass_function;
+ EX(call)->called_scope = NULL;
+ Z_OBJ(EX(call)->This) = NULL;
+ ZEND_SET_CALL_INFO(EX(call), ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
+
+ zval_ptr_dtor_nogc(free_op1);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
+ }
} else {
if (Z_ISREF_P(arg) &&
!(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
arg = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
param = ZEND_CALL_VAR(EX(call), opline->result.var);
- if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
- zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
- opline->op2.num,
- EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
- EX(call)->func->common.scope ? "::" : "",
- ZSTR_VAL(EX(call)->func->common.function_name));
+ if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
+ if (UNEXPECTED(!Z_ISREF_P(arg))) {
+ if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
- if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
- OBJ_RELEASE((zend_object*)EX(call)->func->common.prototype);
- }
- if (Z_OBJ(EX(call)->This)) {
- OBJ_RELEASE(Z_OBJ(EX(call)->This));
- }
- ZVAL_UNDEF(param);
- EX(call)->func = (zend_function*)&zend_pass_function;
- EX(call)->called_scope = NULL;
- Z_OBJ(EX(call)->This) = NULL;
- ZEND_SET_CALL_INFO(EX(call), ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
+ zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
+ opline->op2.num,
+ EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
+ EX(call)->func->common.scope ? "::" : "",
+ ZSTR_VAL(EX(call)->func->common.function_name));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
+ OBJ_RELEASE((zend_object*)EX(call)->func->common.prototype);
+ }
+ if (Z_OBJ(EX(call)->This)) {
+ OBJ_RELEASE(Z_OBJ(EX(call)->This));
+ }
+ ZVAL_UNDEF(param);
+ EX(call)->func = (zend_function*)&zend_pass_function;
+ EX(call)->called_scope = NULL;
+ Z_OBJ(EX(call)->This) = NULL;
+ ZEND_SET_CALL_INFO(EX(call), ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
+
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
+ }
} else {
if (Z_ISREF_P(arg) &&
!(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {