@@ -1626,6 +1626,10 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
1626
1626
case ZEND_SEND_VAL_EX :
1627
1627
case ZEND_SEND_VAR_EX :
1628
1628
case ZEND_SEND_VAR_NO_REF_EX :
1629
+ if (opline -> op2_type == IS_CONST ) {
1630
+ /* Named parameters not supported in JIT */
1631
+ break ;
1632
+ }
1629
1633
if (opline -> op2 .num > MAX_ARG_FLAG_NUM ) {
1630
1634
goto propagate_arg ;
1631
1635
}
@@ -1634,6 +1638,10 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
1634
1638
case ZEND_SEND_VAR :
1635
1639
case ZEND_SEND_VAR_NO_REF :
1636
1640
case ZEND_SEND_FUNC_ARG :
1641
+ if (opline -> op2_type == IS_CONST ) {
1642
+ /* Named parameters not supported in JIT */
1643
+ break ;
1644
+ }
1637
1645
ADD_OP1_TRACE_GUARD ();
1638
1646
propagate_arg :
1639
1647
/* Propagate argument type */
@@ -1691,16 +1699,21 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
1691
1699
}
1692
1700
break ;
1693
1701
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 );
1704
1717
}
1705
1718
break ;
1706
1719
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
1799
1812
if (ssa -> var_info ) {
1800
1813
/* Add statically inferred restrictions */
1801
1814
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
1805
1816
&& frame
1806
1817
&& frame -> call
1807
1818
&& frame -> call -> func
1808
1819
&& !ARG_SHOULD_BE_SENT_BY_REF (frame -> call -> func , opline -> op2 .num )) {
1809
1820
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 ;
1813
1822
if (ssa_var_info [ssa_ops [idx ].op1_def ].type & MAY_BE_RC1 ) {
1814
1823
ssa_var_info [ssa_ops [idx ].op1_def ].type |= MAY_BE_RCN ;
1815
1824
}
@@ -2674,6 +2683,10 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
2674
2683
}
2675
2684
break ;
2676
2685
case ZEND_SEND_VAR :
2686
+ if (opline -> op2_type == IS_CONST ) {
2687
+ /* Named parameters not supported in JIT */
2688
+ break ;
2689
+ }
2677
2690
case ZEND_PRE_INC :
2678
2691
case ZEND_PRE_DEC :
2679
2692
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
3651
3664
&& frame -> call -> func
3652
3665
&& !ARG_MUST_BE_SENT_BY_REF (frame -> call -> func , (opline + 1 )-> op2 .num )))
3653
3666
&& (opline + 1 )-> op1_type == IS_TMP_VAR
3667
+ && (opline + 1 )-> op2_type != IS_CONST /* Named parameters not supported in JIT */
3654
3668
&& (opline + 1 )-> op1 .var == opline -> result .var ) {
3655
3669
p ++ ;
3656
3670
if (frame -> call ) {
@@ -3725,6 +3739,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
3725
3739
&& frame -> call -> func
3726
3740
&& !ARG_MUST_BE_SENT_BY_REF (frame -> call -> func , (opline + 1 )-> op2 .num )))
3727
3741
&& (opline + 1 )-> op1_type == IS_TMP_VAR
3742
+ && (opline + 1 )-> op2_type != IS_CONST /* Named parameters not supported in JIT */
3728
3743
&& (opline + 1 )-> op1 .var == opline -> result .var ) {
3729
3744
p ++ ;
3730
3745
if (frame -> call
@@ -3808,6 +3823,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
3808
3823
&& frame -> call -> func
3809
3824
&& !ARG_MUST_BE_SENT_BY_REF (frame -> call -> func , (opline + 1 )-> op2 .num )))
3810
3825
&& (opline + 1 )-> op1_type == IS_TMP_VAR
3826
+ && (opline + 1 )-> op2_type != IS_CONST /* Named parameters not supported in JIT */
3811
3827
&& (opline + 1 )-> op1 .var == opline -> result .var ) {
3812
3828
p ++ ;
3813
3829
if (frame -> call
@@ -4242,6 +4258,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4242
4258
&& frame -> call -> func
4243
4259
&& !ARG_MUST_BE_SENT_BY_REF (frame -> call -> func , (opline + 1 )-> op2 .num )))
4244
4260
&& (opline + 1 )-> op1_type == IS_TMP_VAR
4261
+ && (opline + 1 )-> op2_type != IS_CONST /* Named parameters not supported in JIT */
4245
4262
&& (opline + 1 )-> op1 .var == opline -> result .var ) {
4246
4263
p ++ ;
4247
4264
if (frame -> call
@@ -4397,14 +4414,15 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4397
4414
}
4398
4415
goto done ;
4399
4416
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 ) {
4402
4420
break ;
4403
4421
}
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 );
4408
4426
break ;
4409
4427
}
4410
4428
if (!zend_jit_check_func_arg (& dasm_state , opline )) {
0 commit comments