Skip to content

Commit e38a22d

Browse files
committed
Compile calls with R in known by-value arg position
1 parent 9bdeafe commit e38a22d

File tree

7 files changed

+29
-27
lines changed

7 files changed

+29
-27
lines changed

Zend/zend_compile.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3846,7 +3846,9 @@ static uint32_t zend_compile_args(
38463846
/* Treat passing of $GLOBALS the same as passing a call.
38473847
* This will error at runtime if the argument is by-ref. */
38483848
if (zend_is_call(arg) || is_globals_fetch(arg)) {
3849-
zend_compile_var(&arg_node, arg, is_globals_fetch(arg) ? BP_VAR_R : BP_VAR_FUNC_ARG, false);
3849+
uint32_t type = is_globals_fetch(arg) || (fbc && !ARG_MUST_BE_SENT_BY_REF(fbc, arg_num) && !ARG_MAY_BE_SENT_BY_REF(fbc, arg_num))
3850+
? BP_VAR_R : BP_VAR_FUNC_ARG;
3851+
zend_compile_var(&arg_node, arg, type, false);
38503852
if (arg_node.op_type & (IS_CONST|IS_TMP_VAR)) {
38513853
/* Function call was converted into builtin instruction */
38523854
if (!fbc || ARG_MUST_BE_SENT_BY_REF(fbc, arg_num)) {

ext/opcache/tests/match/001.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ $_main:
4040
0006 INIT_FCALL 1 %d string("var_dump")
4141
0007 INIT_FCALL 1 %d string("test")
4242
0008 SEND_VAR CV0($char) 1
43-
0009 V2 = DO_UCALL
44-
0010 SEND_VAR V2 1
43+
0009 T2 = DO_UCALL
44+
0010 SEND_VAL T2 1
4545
0011 DO_ICALL
4646
0012 JMP 0005
4747
0013 FE_FREE T1

ext/opcache/tests/match/003.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ $_main:
4141
0006 INIT_FCALL 1 %d string("var_dump")
4242
0007 INIT_FCALL 1 %d string("test")
4343
0008 SEND_VAR CV0($char) 1
44-
0009 V2 = DO_UCALL
45-
0010 SEND_VAR V2 1
44+
0009 T2 = DO_UCALL
45+
0010 SEND_VAL T2 1
4646
0011 DO_ICALL
4747
0012 JMP 0005
4848
0013 FE_FREE T1

ext/opcache/tests/match/004.phpt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ $_main:
4646
0006 INIT_FCALL 1 %d string("var_dump")
4747
0007 INIT_FCALL 1 %d string("test")
4848
0008 SEND_VAR CV0($number) 1
49-
0009 V2 = DO_UCALL
50-
0010 SEND_VAR V2 1
49+
0009 T2 = DO_UCALL
50+
0010 SEND_VAL T2 1
5151
0011 DO_ICALL
5252
0012 INIT_FCALL 1 %d string("var_dump")
5353
0013 INIT_FCALL 1 %d string("test")
5454
0014 T2 = CAST (string) CV0($number)
5555
0015 SEND_VAL T2 1
56-
0016 V2 = DO_UCALL
57-
0017 SEND_VAR V2 1
56+
0016 T2 = DO_UCALL
57+
0017 SEND_VAL T2 1
5858
0018 DO_ICALL
5959
0019 JMP 0005
6060
0020 FE_FREE T1

ext/opcache/tests/opt/gh14873.phpt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,44 +62,44 @@ $_main:
6262
0000 INIT_FCALL 1 %d string("var_dump")
6363
0001 INIT_FCALL 1 %d string("testtrim1")
6464
0002 SEND_VAL string(" boo ") 1
65-
0003 V0 = DO_UCALL
66-
0004 SEND_VAR V0 1
65+
0003 T0 = DO_UCALL
66+
0004 SEND_VAL T0 1
6767
0005 DO_ICALL
6868
0006 INIT_FCALL 1 %d string("var_dump")
6969
0007 INIT_FCALL 1 %d string("testmin2first")
7070
0008 SEND_VAL int(5) 1
71-
0009 V0 = DO_UCALL
72-
0010 SEND_VAR V0 1
71+
0009 T0 = DO_UCALL
72+
0010 SEND_VAL T0 1
7373
0011 DO_ICALL
7474
0012 INIT_FCALL 1 %d string("var_dump")
7575
0013 INIT_FCALL 1 %d string("testmin2second")
7676
0014 SEND_VAL int(5) 1
77-
0015 V0 = DO_UCALL
78-
0016 SEND_VAR V0 1
77+
0015 T0 = DO_UCALL
78+
0016 SEND_VAL T0 1
7979
0017 DO_ICALL
8080
0018 INIT_FCALL 1 %d string("var_dump")
8181
0019 INIT_FCALL 1 %d string("testmin2_tmp")
8282
0020 SEND_VAL int(5) 1
83-
0021 V0 = DO_UCALL
84-
0022 SEND_VAR V0 1
83+
0021 T0 = DO_UCALL
84+
0022 SEND_VAL T0 1
8585
0023 DO_ICALL
8686
0024 INIT_FCALL 1 %d string("var_dump")
8787
0025 INIT_FCALL 1 %d string("teststrstr3first")
8888
0026 SEND_VAL string("needles") 1
89-
0027 V0 = DO_UCALL
90-
0028 SEND_VAR V0 1
89+
0027 T0 = DO_UCALL
90+
0028 SEND_VAL T0 1
9191
0029 DO_ICALL
9292
0030 INIT_FCALL 1 %d string("var_dump")
9393
0031 INIT_FCALL 1 %d string("teststrstr3second")
9494
0032 SEND_VAL string("needle") 1
95-
0033 V0 = DO_UCALL
96-
0034 SEND_VAR V0 1
95+
0033 T0 = DO_UCALL
96+
0034 SEND_VAL T0 1
9797
0035 DO_ICALL
9898
0036 INIT_FCALL 1 %d string("var_dump")
9999
0037 INIT_FCALL 1 %d string("teststrstr3third")
100100
0038 SEND_VAL bool(false) 1
101-
0039 V0 = DO_UCALL
102-
0040 SEND_VAR V0 1
101+
0039 T0 = DO_UCALL
102+
0040 SEND_VAL T0 1
103103
0041 DO_ICALL
104104
0042 RETURN int(1)
105105

sapi/phpdbg/tests/print_001.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ L0014 0000 CV0($baz) = RECV 1
1919
L0015 0001 INIT_FCALL %d %d string("var_dump")
2020
L0015 0002 INIT_FCALL %d %d string("strrev")
2121
L0015 0003 SEND_VAR CV0($baz) 1
22-
L0015 0004 V1 = DO_ICALL
23-
L0015 0005 SEND_VAR V1 1
22+
L0015 0004 T1 = DO_ICALL
23+
L0015 0005 SEND_VAL T1 1
2424
L0015 0006 DO_ICALL
2525
L0016 0007 RETURN null
2626
prompt> [User Class: Foo\Bar (2 methods)]

sapi/phpdbg/tests/print_002.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ L0014 0000 CV0($baz) = RECV 1
2525
L0015 0001 INIT_FCALL %d %d string("var_dump")
2626
L0015 0002 INIT_FCALL %d %d string("strrev")
2727
L0015 0003 SEND_VAR CV0($baz) 1
28-
L0015 0004 V1 = DO_ICALL
29-
L0015 0005 SEND_VAR V1 1
28+
L0015 0004 T1 = DO_ICALL
29+
L0015 0005 SEND_VAL T1 1
3030
L0015 0006 DO_ICALL
3131
L0016 0007 RETURN null
3232
prompt> L0015 0001 INIT_FCALL %d %d string("var_dump")

0 commit comments

Comments
 (0)