@@ -2108,21 +2108,31 @@ static int try_remove_definition(sccp_ctx *ctx, int var_num, zend_ssa_var *var,
2108
2108
zend_optimizer_update_op1_const (ctx -> scdf .op_array , opline , value );
2109
2109
}
2110
2110
return 0 ;
2111
- } else {
2112
- zend_ssa_remove_result_def (ssa , ssa_op );
2113
- if (opline -> opcode == ZEND_DO_ICALL ) {
2114
- removed_ops = remove_call (ctx , opline , ssa_op );
2115
- } else if (opline -> opcode == ZEND_TYPE_CHECK
2116
- && (opline -> op1_type & (IS_VAR |IS_TMP_VAR ))
2117
- && (!value_known (& ctx -> values [ssa_op -> op1_use ])
2118
- || IS_PARTIAL_ARRAY (& ctx -> values [ssa_op -> op1_use ])
2119
- || IS_PARTIAL_OBJECT (& ctx -> values [ssa_op -> op1_use ]))) {
2111
+ } else if ((opline -> op2_type & (IS_VAR |IS_TMP_VAR ))
2112
+ && (!value_known (& ctx -> values [ssa_op -> op2_use ])
2113
+ || IS_PARTIAL_ARRAY (& ctx -> values [ssa_op -> op2_use ])
2114
+ || IS_PARTIAL_OBJECT (& ctx -> values [ssa_op -> op2_use ]))) {
2115
+ return 0 ;
2116
+ } else if ((opline -> op1_type & (IS_VAR |IS_TMP_VAR ))
2117
+ && (!value_known (& ctx -> values [ssa_op -> op1_use ])
2118
+ || IS_PARTIAL_ARRAY (& ctx -> values [ssa_op -> op1_use ])
2119
+ || IS_PARTIAL_OBJECT (& ctx -> values [ssa_op -> op1_use ]))) {
2120
+ if (opline -> opcode == ZEND_TYPE_CHECK
2121
+ || opline -> opcode == ZEND_BOOL ) {
2122
+ zend_ssa_remove_result_def (ssa , ssa_op );
2120
2123
/* For TYPE_CHECK we may compute the result value without knowing the
2121
2124
* operand, based on type inference information. Make sure the operand is
2122
2125
* freed and leave further cleanup to DCE. */
2123
2126
opline -> opcode = ZEND_FREE ;
2124
2127
opline -> result_type = IS_UNUSED ;
2125
2128
removed_ops ++ ;
2129
+ } else {
2130
+ return 0 ;
2131
+ }
2132
+ } else {
2133
+ zend_ssa_remove_result_def (ssa , ssa_op );
2134
+ if (opline -> opcode == ZEND_DO_ICALL ) {
2135
+ removed_ops = remove_call (ctx , opline , ssa_op );
2126
2136
} else {
2127
2137
zend_ssa_remove_instr (ssa , opline , ssa_op );
2128
2138
removed_ops ++ ;
0 commit comments