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