@@ -2888,7 +2888,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
2888
2888
case ZEND_POST_INC :
2889
2889
case ZEND_POST_DEC :
2890
2890
if (ssa_ops [i ].result_def >= 0 ) {
2891
- tmp = (MAY_BE_RC1 | t1 ) & ~(MAY_BE_UNDEF |MAY_BE_REF |MAY_BE_RCN );
2891
+ tmp = (MAY_BE_RC1 | t1 ) & ~(MAY_BE_UNDEF |MAY_BE_ERROR | MAY_BE_REF |MAY_BE_RCN );
2892
2892
if (t1 & MAY_BE_UNDEF ) {
2893
2893
tmp |= MAY_BE_NULL ;
2894
2894
}
@@ -3076,7 +3076,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
3076
3076
}
3077
3077
}
3078
3078
if (ssa_ops [i ].result_def >= 0 ) {
3079
- UPDATE_SSA_TYPE (tmp , ssa_ops [i ].result_def );
3079
+ UPDATE_SSA_TYPE (tmp & ~ MAY_BE_REF , ssa_ops [i ].result_def );
3080
3080
if ((t2 & MAY_BE_OBJECT ) && ssa_ops [i ].op2_use >= 0 && ssa_var_info [ssa_ops [i ].op2_use ].ce ) {
3081
3081
UPDATE_SSA_OBJ_TYPE (ssa_var_info [ssa_ops [i ].op2_use ].ce , ssa_var_info [ssa_ops [i ].op2_use ].is_instanceof , ssa_ops [i ].result_def );
3082
3082
} else {
@@ -3096,7 +3096,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
3096
3096
if (opline -> op2_type == IS_VAR && opline -> extended_value == ZEND_RETURNS_FUNCTION ) {
3097
3097
tmp = (MAY_BE_REF | MAY_BE_RCN | MAY_BE_RC1 | t2 ) & ~MAY_BE_UNDEF ;
3098
3098
} else {
3099
- tmp = (MAY_BE_REF | t2 ) & ~(MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN );
3099
+ tmp = (MAY_BE_REF | t2 ) & ~(MAY_BE_UNDEF | MAY_BE_ERROR | MAY_BE_RC1 | MAY_BE_RCN );
3100
3100
}
3101
3101
if (t2 & MAY_BE_UNDEF ) {
3102
3102
tmp |= MAY_BE_NULL ;
@@ -3615,7 +3615,10 @@ static void zend_update_type_info(const zend_op_array *op_array,
3615
3615
}
3616
3616
}
3617
3617
if (ssa_ops [i ].result_def >= 0 ) {
3618
- tmp = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ERROR ;
3618
+ tmp = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF ;
3619
+ if (opline -> opcode != ZEND_FETCH_OBJ_R && opline -> opcode != ZEND_FETCH_OBJ_IS ) {
3620
+ tmp |= MAY_BE_ERROR ;
3621
+ }
3619
3622
if (opline -> result_type == IS_TMP_VAR ) {
3620
3623
tmp |= MAY_BE_RC1 ;
3621
3624
} else {
0 commit comments