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