@@ -4805,6 +4805,16 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4805
4805
op2_info = OP2_INFO ();
4806
4806
CHECK_OP2_TRACE_TYPE ();
4807
4807
op1_info = OP1_INFO ();
4808
+ if (ssa -> vars [ssa_op -> op1_use ].no_val ) {
4809
+ if ((op1_info & (MAY_BE_ANY |MAY_BE_UNDEF |MAY_BE_GUARD )) == MAY_BE_LONG
4810
+ || (op1_info & (MAY_BE_ANY |MAY_BE_UNDEF |MAY_BE_GUARD )) == MAY_BE_DOUBLE ) {
4811
+ if (STACK_MEM_TYPE (stack , EX_VAR_TO_NUM (opline -> op1 .var )) != IS_LONG
4812
+ && STACK_MEM_TYPE (stack , EX_VAR_TO_NUM (opline -> op1 .var )) != IS_DOUBLE ) {
4813
+ /* type may be not set */
4814
+ op1_info |= MAY_BE_NULL ;
4815
+ }
4816
+ }
4817
+ }
4808
4818
op1_def_info = OP1_DEF_INFO ();
4809
4819
if (op1_type != IS_UNKNOWN && (op1_info & MAY_BE_GUARD )) {
4810
4820
if (op1_type < IS_STRING
@@ -6169,7 +6179,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
6169
6179
type = STACK_TYPE (stack , EX_VAR_TO_NUM (opline -> op1 .var ));
6170
6180
}
6171
6181
SET_STACK_TYPE (stack , EX_VAR_TO_NUM (opline -> op1 .var ), type ,
6172
- (type == IS_UNKNOWN || !ra || !ra [ssa_op -> op1_def ]));
6182
+ (type == IS_UNKNOWN || !ra ||
6183
+ (!ra [ssa_op -> op1_def ] && !ssa -> vars [ssa_op -> op1_def ].no_val )));
6173
6184
if (type != IS_UNKNOWN ) {
6174
6185
ssa -> var_info [ssa_op -> op1_def ].type &= ~MAY_BE_GUARD ;
6175
6186
if (ra && ra [ssa_op -> op1_def ]) {
@@ -6212,7 +6223,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
6212
6223
type = STACK_TYPE (stack , EX_VAR_TO_NUM (opline -> op2 .var ));
6213
6224
}
6214
6225
SET_STACK_TYPE (stack , EX_VAR_TO_NUM (opline -> op2 .var ), type ,
6215
- (type == IS_UNKNOWN || !ra || !ra [ssa_op -> op2_def ]));
6226
+ (type == IS_UNKNOWN || !ra ||
6227
+ (!ra [ssa_op -> op2_def ] && !ssa -> vars [ssa_op -> op2_def ].no_val )));
6216
6228
if (type != IS_UNKNOWN ) {
6217
6229
ssa -> var_info [ssa_op -> op2_def ].type &= ~MAY_BE_GUARD ;
6218
6230
if (ra && ra [ssa_op -> op2_def ]) {
0 commit comments