Skip to content

Commit d79288c

Browse files
committed
Merge branch 'PHP-7.0'
2 parents 5a538e1 + 73958ca commit d79288c

File tree

3 files changed

+29
-24
lines changed

3 files changed

+29
-24
lines changed

Zend/tests/call_user_func_array_prefer_ref.phpt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ namespace {
1010
call_user_func_array('array_multisort', $args);
1111
var_dump($args);
1212
unset($args);
13+
14+
$array = [3, 2, 1];
15+
call_user_func('array_multisort', $array);
16+
var_dump($array);
17+
unset($array);
1318
}
1419

1520
namespace Foo {
@@ -19,6 +24,11 @@ namespace Foo {
1924
call_user_func_array('array_multisort', $args);
2025
var_dump($args);
2126
unset($args);
27+
28+
$array = [3, 2, 1];
29+
call_user_func('array_multisort', $array);
30+
var_dump($array);
31+
unset($array);
2232
}
2333

2434
?>
@@ -34,6 +44,14 @@ array(1) {
3444
int(1)
3545
}
3646
}
47+
array(3) {
48+
[0]=>
49+
int(3)
50+
[1]=>
51+
int(2)
52+
[2]=>
53+
int(1)
54+
}
3755
array(1) {
3856
[0]=>
3957
array(3) {
@@ -45,3 +63,11 @@ array(1) {
4563
int(1)
4664
}
4765
}
66+
array(3) {
67+
[0]=>
68+
int(3)
69+
[1]=>
70+
int(2)
71+
[2]=>
72+
int(1)
73+
}

Zend/zend_vm_def.h

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4621,7 +4621,6 @@ ZEND_VM_HANDLER(120, ZEND_SEND_USER, VAR|CV, NUM)
46214621

46224622
if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
46234623
if (UNEXPECTED(!Z_ISREF_P(arg))) {
4624-
46254624
if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
46264625

46274626
zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
@@ -4644,21 +4643,15 @@ ZEND_VM_HANDLER(120, ZEND_SEND_USER, VAR|CV, NUM)
46444643
FREE_OP1();
46454644
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46464645
}
4647-
4648-
ZVAL_NEW_REF(arg, arg);
46494646
}
4650-
Z_ADDREF_P(arg);
46514647
} else {
46524648
if (Z_ISREF_P(arg) &&
46534649
!(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
46544650
/* don't separate references for __call */
46554651
arg = Z_REFVAL_P(arg);
46564652
}
4657-
if (Z_OPT_REFCOUNTED_P(arg)) {
4658-
Z_ADDREF_P(arg);
4659-
}
46604653
}
4661-
ZVAL_COPY_VALUE(param, arg);
4654+
ZVAL_COPY(param, arg);
46624655

46634656
FREE_OP1();
46644657
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();

Zend/zend_vm_execute.h

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15636,7 +15636,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEN
1563615636

1563715637
if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
1563815638
if (UNEXPECTED(!Z_ISREF_P(arg))) {
15639-
1564015639
if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
1564115640

1564215641
zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
@@ -15659,21 +15658,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEN
1565915658
zval_ptr_dtor_nogc(free_op1);
1566015659
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1566115660
}
15662-
15663-
ZVAL_NEW_REF(arg, arg);
1566415661
}
15665-
Z_ADDREF_P(arg);
1566615662
} else {
1566715663
if (Z_ISREF_P(arg) &&
1566815664
!(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
1566915665
/* don't separate references for __call */
1567015666
arg = Z_REFVAL_P(arg);
1567115667
}
15672-
if (Z_OPT_REFCOUNTED_P(arg)) {
15673-
Z_ADDREF_P(arg);
15674-
}
1567515668
}
15676-
ZVAL_COPY_VALUE(param, arg);
15669+
ZVAL_COPY(param, arg);
1567715670

1567815671
zval_ptr_dtor_nogc(free_op1);
1567915672
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -35245,7 +35238,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND
3524535238

3524635239
if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
3524735240
if (UNEXPECTED(!Z_ISREF_P(arg))) {
35248-
3524935241
if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
3525035242

3525135243
zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
@@ -35267,21 +35259,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND
3526735259

3526835260
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3526935261
}
35270-
35271-
ZVAL_NEW_REF(arg, arg);
3527235262
}
35273-
Z_ADDREF_P(arg);
3527435263
} else {
3527535264
if (Z_ISREF_P(arg) &&
3527635265
!(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
3527735266
/* don't separate references for __call */
3527835267
arg = Z_REFVAL_P(arg);
3527935268
}
35280-
if (Z_OPT_REFCOUNTED_P(arg)) {
35281-
Z_ADDREF_P(arg);
35282-
}
3528335269
}
35284-
ZVAL_COPY_VALUE(param, arg);
35270+
ZVAL_COPY(param, arg);
3528535271

3528635272
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3528735273
}

0 commit comments

Comments
 (0)