Skip to content

Commit 1f1dbd7

Browse files
committed
Merge branch 'PHP-8.0'
* PHP-8.0: Fixed support for named parameters (Zend/tests/named_params/references.phpt) Update NEWS for 8.0.0RC4 Update NEWS for PHP 8.0.0RC3
2 parents 5b46bde + 43e4938 commit 1f1dbd7

File tree

3 files changed

+51
-22
lines changed

3 files changed

+51
-22
lines changed

NEWS

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3+
<<<<<<< HEAD
34
?? ??? ????, PHP 8.1.0alpha1
5+
=======
6+
?? ??? ????, PHP 8.0.0RC4
7+
8+
9+
29 Oct 2020, PHP 8.0.0RC3
10+
>>>>>>> PHP-8.0
411

512
- FTP:
613
. Convert resource<ftp> to object \FTPConnection. (Sara)

ext/opcache/jit/zend_jit_internal.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,10 @@ struct _zend_jit_trace_stack_frame {
455455
(frame)->_info |= TRACE_FRAME_MASK_LAST_SEND_BY_VAL; \
456456
(frame)->_info &= ~TRACE_FRAME_MASK_LAST_SEND_BY_REF; \
457457
} while (0)
458+
#define TRACE_FRAME_SET_LAST_SEND_UNKNOWN(frame) do { \
459+
(frame)->_info &= ~TRACE_FRAME_MASK_LAST_SEND_BY_VAL; \
460+
(frame)->_info &= ~TRACE_FRAME_MASK_LAST_SEND_BY_REF; \
461+
} while (0)
458462
#define TRACE_FRAME_SET_RETURN_VALUE_USED(frame) do { \
459463
(frame)->_info |= TRACE_FRAME_MASK_RETURN_VALUE_USED; \
460464
(frame)->_info &= ~TRACE_FRAME_MASK_RETURN_VALUE_UNUSED; \

ext/opcache/jit/zend_jit_trace.c

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1626,6 +1626,10 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
16261626
case ZEND_SEND_VAL_EX:
16271627
case ZEND_SEND_VAR_EX:
16281628
case ZEND_SEND_VAR_NO_REF_EX:
1629+
if (opline->op2_type == IS_CONST) {
1630+
/* Named parameters not supported in JIT */
1631+
break;
1632+
}
16291633
if (opline->op2.num > MAX_ARG_FLAG_NUM) {
16301634
goto propagate_arg;
16311635
}
@@ -1634,6 +1638,10 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
16341638
case ZEND_SEND_VAR:
16351639
case ZEND_SEND_VAR_NO_REF:
16361640
case ZEND_SEND_FUNC_ARG:
1641+
if (opline->op2_type == IS_CONST) {
1642+
/* Named parameters not supported in JIT */
1643+
break;
1644+
}
16371645
ADD_OP1_TRACE_GUARD();
16381646
propagate_arg:
16391647
/* Propagate argument type */
@@ -1691,16 +1699,21 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
16911699
}
16921700
break;
16931701
case ZEND_CHECK_FUNC_ARG:
1694-
if (frame
1695-
&& frame->call
1696-
&& frame->call->func) {
1697-
uint32_t arg_num = opline->op2.num;
1698-
1699-
if (ARG_SHOULD_BE_SENT_BY_REF(frame->call->func, arg_num)) {
1700-
TRACE_FRAME_SET_LAST_SEND_BY_REF(frame->call);
1701-
} else {
1702-
TRACE_FRAME_SET_LAST_SEND_BY_VAL(frame->call);
1703-
}
1702+
if (!frame
1703+
|| !frame->call
1704+
|| !frame->call->func) {
1705+
break;
1706+
}
1707+
if (opline->op2_type == IS_CONST
1708+
|| opline->op2.num > MAX_ARG_FLAG_NUM) {
1709+
/* Named parameters not supported in JIT */
1710+
TRACE_FRAME_SET_LAST_SEND_UNKNOWN(frame->call);
1711+
break;
1712+
}
1713+
if (ARG_SHOULD_BE_SENT_BY_REF(frame->call->func, opline->op2.num)) {
1714+
TRACE_FRAME_SET_LAST_SEND_BY_REF(frame->call);
1715+
} else {
1716+
TRACE_FRAME_SET_LAST_SEND_BY_VAL(frame->call);
17041717
}
17051718
break;
17061719
case ZEND_FETCH_OBJ_FUNC_ARG:
@@ -1799,17 +1812,13 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
17991812
if (ssa->var_info) {
18001813
/* Add statically inferred restrictions */
18011814
if (ssa_ops[idx].op1_def >= 0) {
1802-
if ((opline->opcode == ZEND_SEND_VAR_EX
1803-
|| opline->opcode == ZEND_FETCH_DIM_FUNC_ARG
1804-
|| opline->opcode == ZEND_FETCH_OBJ_FUNC_ARG)
1815+
if (opline->opcode == ZEND_SEND_VAR_EX
18051816
&& frame
18061817
&& frame->call
18071818
&& frame->call->func
18081819
&& !ARG_SHOULD_BE_SENT_BY_REF(frame->call->func, opline->op2.num)) {
18091820
ssa_var_info[ssa_ops[idx].op1_def] = ssa_var_info[ssa_ops[idx].op1_use];
1810-
if (opline->opcode == ZEND_SEND_VAR_EX) {
1811-
ssa_var_info[ssa_ops[idx].op1_def].type &= ~MAY_BE_GUARD;
1812-
}
1821+
ssa_var_info[ssa_ops[idx].op1_def].type &= ~MAY_BE_GUARD;
18131822
if (ssa_var_info[ssa_ops[idx].op1_def].type & MAY_BE_RC1) {
18141823
ssa_var_info[ssa_ops[idx].op1_def].type |= MAY_BE_RCN;
18151824
}
@@ -2674,6 +2683,10 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
26742683
}
26752684
break;
26762685
case ZEND_SEND_VAR:
2686+
if (opline->op2_type == IS_CONST) {
2687+
/* Named parameters not supported in JIT */
2688+
break;
2689+
}
26772690
case ZEND_PRE_INC:
26782691
case ZEND_PRE_DEC:
26792692
if (i == ssa->ops[line].op1_def &&
@@ -3651,6 +3664,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
36513664
&& frame->call->func
36523665
&& !ARG_MUST_BE_SENT_BY_REF(frame->call->func, (opline+1)->op2.num)))
36533666
&& (opline+1)->op1_type == IS_TMP_VAR
3667+
&& (opline+1)->op2_type != IS_CONST /* Named parameters not supported in JIT */
36543668
&& (opline+1)->op1.var == opline->result.var) {
36553669
p++;
36563670
if (frame->call) {
@@ -3725,6 +3739,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
37253739
&& frame->call->func
37263740
&& !ARG_MUST_BE_SENT_BY_REF(frame->call->func, (opline+1)->op2.num)))
37273741
&& (opline+1)->op1_type == IS_TMP_VAR
3742+
&& (opline+1)->op2_type != IS_CONST /* Named parameters not supported in JIT */
37283743
&& (opline+1)->op1.var == opline->result.var) {
37293744
p++;
37303745
if (frame->call
@@ -3808,6 +3823,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
38083823
&& frame->call->func
38093824
&& !ARG_MUST_BE_SENT_BY_REF(frame->call->func, (opline+1)->op2.num)))
38103825
&& (opline+1)->op1_type == IS_TMP_VAR
3826+
&& (opline+1)->op2_type != IS_CONST /* Named parameters not supported in JIT */
38113827
&& (opline+1)->op1.var == opline->result.var) {
38123828
p++;
38133829
if (frame->call
@@ -4242,6 +4258,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
42424258
&& frame->call->func
42434259
&& !ARG_MUST_BE_SENT_BY_REF(frame->call->func, (opline+1)->op2.num)))
42444260
&& (opline+1)->op1_type == IS_TMP_VAR
4261+
&& (opline+1)->op2_type != IS_CONST /* Named parameters not supported in JIT */
42454262
&& (opline+1)->op1.var == opline->result.var) {
42464263
p++;
42474264
if (frame->call
@@ -4397,14 +4414,15 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
43974414
}
43984415
goto done;
43994416
case ZEND_CHECK_FUNC_ARG:
4400-
if (opline->op2_type == IS_CONST) {
4401-
/* Named parameters not supported in JIT */
4417+
if (!JIT_G(current_frame)
4418+
|| !JIT_G(current_frame)->call
4419+
|| !JIT_G(current_frame)->call->func) {
44024420
break;
44034421
}
4404-
if (opline->op2.num > MAX_ARG_FLAG_NUM
4405-
&& (!JIT_G(current_frame)
4406-
|| !JIT_G(current_frame)->call
4407-
|| !JIT_G(current_frame)->call->func)) {
4422+
if (opline->op2_type == IS_CONST
4423+
|| opline->op2.num > MAX_ARG_FLAG_NUM) {
4424+
/* Named parameters not supported in JIT */
4425+
TRACE_FRAME_SET_LAST_SEND_UNKNOWN(JIT_G(current_frame)->call);
44084426
break;
44094427
}
44104428
if (!zend_jit_check_func_arg(&dasm_state, opline)) {

0 commit comments

Comments
 (0)