@@ -1041,8 +1041,6 @@ static int zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *ss
1041
1041
1042
1042
ZEND_API int zend_inference_propagate_range (const zend_op_array * op_array , zend_ssa * ssa , zend_op * opline , zend_ssa_op * ssa_op , int var , zend_ssa_range * tmp )
1043
1043
{
1044
- zend_long op1_min , op2_min , op1_max , op2_max ;
1045
-
1046
1044
tmp -> underflow = 0 ;
1047
1045
tmp -> overflow = 0 ;
1048
1046
switch (opline -> opcode ) {
@@ -1070,8 +1068,8 @@ ZEND_API int zend_inference_propagate_range(const zend_op_array *op_array, zend_
1070
1068
tmp -> min = ZEND_LONG_MIN ;
1071
1069
tmp -> max = ZEND_LONG_MAX ;
1072
1070
} else {
1073
- op1_min = OP1_MIN_RANGE ();
1074
- op1_max = OP1_MAX_RANGE ();
1071
+ zend_long op1_min = OP1_MIN_RANGE ();
1072
+ zend_long op1_max = OP1_MAX_RANGE ();
1075
1073
tmp -> min = ~op1_max ;
1076
1074
tmp -> max = ~op1_min ;
1077
1075
}
@@ -1104,144 +1102,6 @@ ZEND_API int zend_inference_propagate_range(const zend_op_array *op_array, zend_
1104
1102
}
1105
1103
}
1106
1104
break ;
1107
- case ZEND_BOOL :
1108
- case ZEND_JMPZ_EX :
1109
- case ZEND_JMPNZ_EX :
1110
- if (ssa_op -> result_def == var ) {
1111
- if (OP1_HAS_RANGE ()) {
1112
- op1_min = OP1_MIN_RANGE ();
1113
- op1_max = OP1_MAX_RANGE ();
1114
- tmp -> min = (op1_min > 0 || op1_max < 0 );
1115
- tmp -> max = (op1_min != 0 || op1_max != 0 );
1116
- return 1 ;
1117
- } else {
1118
- tmp -> min = 0 ;
1119
- tmp -> max = 1 ;
1120
- return 1 ;
1121
- }
1122
- }
1123
- break ;
1124
- case ZEND_BOOL_NOT :
1125
- if (ssa_op -> result_def == var ) {
1126
- if (OP1_HAS_RANGE ()) {
1127
- op1_min = OP1_MIN_RANGE ();
1128
- op1_max = OP1_MAX_RANGE ();
1129
- tmp -> min = (op1_min == 0 && op1_max == 0 );
1130
- tmp -> max = (op1_min <= 0 && op1_max >= 0 );
1131
- return 1 ;
1132
- } else {
1133
- tmp -> min = 0 ;
1134
- tmp -> max = 1 ;
1135
- return 1 ;
1136
- }
1137
- }
1138
- break ;
1139
- case ZEND_BOOL_XOR :
1140
- if (ssa_op -> result_def == var ) {
1141
- if (OP1_HAS_RANGE () && OP2_HAS_RANGE ()) {
1142
- op1_min = OP1_MIN_RANGE ();
1143
- op2_min = OP2_MIN_RANGE ();
1144
- op1_max = OP1_MAX_RANGE ();
1145
- op2_max = OP2_MAX_RANGE ();
1146
- op1_min = (op1_min > 0 || op1_max < 0 );
1147
- op1_max = (op1_min != 0 || op1_max != 0 );
1148
- op2_min = (op2_min > 0 || op2_max < 0 );
1149
- op2_max = (op2_min != 0 || op2_max != 0 );
1150
- tmp -> min = 0 ;
1151
- tmp -> max = 1 ;
1152
- if (op1_min == op1_max && op2_min == op2_max ) {
1153
- if (op1_min == op2_min ) {
1154
- tmp -> max = 0 ;
1155
- } else {
1156
- tmp -> min = 1 ;
1157
- }
1158
- }
1159
- return 1 ;
1160
- } else {
1161
- tmp -> min = 0 ;
1162
- tmp -> max = 1 ;
1163
- return 1 ;
1164
- }
1165
- }
1166
- break ;
1167
- case ZEND_IS_IDENTICAL :
1168
- case ZEND_IS_EQUAL :
1169
- if (ssa_op -> result_def == var ) {
1170
- if (OP1_HAS_RANGE () && OP2_HAS_RANGE ()) {
1171
- op1_min = OP1_MIN_RANGE ();
1172
- op2_min = OP2_MIN_RANGE ();
1173
- op1_max = OP1_MAX_RANGE ();
1174
- op2_max = OP2_MAX_RANGE ();
1175
-
1176
- tmp -> min = (op1_min == op1_max &&
1177
- op2_min == op2_max &&
1178
- op1_min == op2_max );
1179
- tmp -> max = (op1_min <= op2_max && op1_max >= op2_min );
1180
- return 1 ;
1181
- } else {
1182
- tmp -> min = 0 ;
1183
- tmp -> max = 1 ;
1184
- return 1 ;
1185
- }
1186
- }
1187
- break ;
1188
- case ZEND_IS_NOT_IDENTICAL :
1189
- case ZEND_IS_NOT_EQUAL :
1190
- if (ssa_op -> result_def == var ) {
1191
- if (OP1_HAS_RANGE () && OP2_HAS_RANGE ()) {
1192
- op1_min = OP1_MIN_RANGE ();
1193
- op2_min = OP2_MIN_RANGE ();
1194
- op1_max = OP1_MAX_RANGE ();
1195
- op2_max = OP2_MAX_RANGE ();
1196
-
1197
- tmp -> min = (op1_min > op2_max || op1_max < op2_min );
1198
- tmp -> max = (op1_min != op1_max ||
1199
- op2_min != op2_max ||
1200
- op1_min != op2_max );
1201
- return 1 ;
1202
- } else {
1203
- tmp -> min = 0 ;
1204
- tmp -> max = 1 ;
1205
- return 1 ;
1206
- }
1207
- }
1208
- break ;
1209
- case ZEND_IS_SMALLER :
1210
- if (ssa_op -> result_def == var ) {
1211
- if (OP1_HAS_RANGE () && OP2_HAS_RANGE ()) {
1212
- op1_min = OP1_MIN_RANGE ();
1213
- op2_min = OP2_MIN_RANGE ();
1214
- op1_max = OP1_MAX_RANGE ();
1215
- op2_max = OP2_MAX_RANGE ();
1216
-
1217
- tmp -> min = op1_max < op2_min ;
1218
- tmp -> max = op1_min < op2_max ;
1219
- return 1 ;
1220
- } else {
1221
- tmp -> min = 0 ;
1222
- tmp -> max = 1 ;
1223
- return 1 ;
1224
- }
1225
- }
1226
- break ;
1227
- case ZEND_IS_SMALLER_OR_EQUAL :
1228
- if (ssa_op -> result_def == var ) {
1229
- if (OP1_HAS_RANGE () && OP2_HAS_RANGE ()) {
1230
- op1_min = OP1_MIN_RANGE ();
1231
- op2_min = OP2_MIN_RANGE ();
1232
- op1_max = OP1_MAX_RANGE ();
1233
- op2_max = OP2_MAX_RANGE ();
1234
-
1235
- tmp -> min = op1_max <= op2_min ;
1236
- tmp -> max = op1_min <= op2_max ;
1237
- return 1 ;
1238
- } else {
1239
- tmp -> min = 0 ;
1240
- tmp -> max = 1 ;
1241
- return 1 ;
1242
- }
1243
- }
1244
- break ;
1245
1105
case ZEND_QM_ASSIGN :
1246
1106
case ZEND_JMP_SET :
1247
1107
case ZEND_COALESCE :
@@ -1267,13 +1127,6 @@ ZEND_API int zend_inference_propagate_range(const zend_op_array *op_array, zend_
1267
1127
}
1268
1128
}
1269
1129
break ;
1270
- case ZEND_ASSERT_CHECK :
1271
- if (ssa_op -> result_def == var ) {
1272
- tmp -> min = 0 ;
1273
- tmp -> max = 1 ;
1274
- return 1 ;
1275
- }
1276
- break ;
1277
1130
case ZEND_SEND_VAR :
1278
1131
if (ssa_op -> op1_def == var ) {
1279
1132
if (ssa_op -> op1_def >= 0 ) {
@@ -1454,12 +1307,6 @@ ZEND_API int zend_inference_propagate_range(const zend_op_array *op_array, zend_
1454
1307
tmp -> max = ZEND_LONG_MAX ;
1455
1308
tmp -> overflow = 0 ;
1456
1309
return 1 ;
1457
- } else if (mask == MAY_BE_BOOL ) {
1458
- tmp -> underflow = 0 ;
1459
- tmp -> min = 0 ;
1460
- tmp -> max = 1 ;
1461
- tmp -> overflow = 0 ;
1462
- return 1 ;
1463
1310
}
1464
1311
}
1465
1312
}
0 commit comments