summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/opcache/Optimizer/zend_dump.c4
-rw-r--r--ext/opcache/Optimizer/zend_func_info.c40
-rw-r--r--ext/opcache/Optimizer/zend_inference.c162
-rw-r--r--ext/opcache/Optimizer/zend_inference.h9
4 files changed, 104 insertions, 111 deletions
diff --git a/ext/opcache/Optimizer/zend_dump.c b/ext/opcache/Optimizer/zend_dump.c
index 1046044f1c..90330c6511 100644
--- a/ext/opcache/Optimizer/zend_dump.c
+++ b/ext/opcache/Optimizer/zend_dump.c
@@ -128,10 +128,6 @@ static void zend_dump_type_info(uint32_t info, zend_class_entry *ce, int is_inst
if (first) first = 0; else fprintf(stderr, ", ");
fprintf(stderr, "undef");
}
- if (info & MAY_BE_DEF) {
- if (first) first = 0; else fprintf(stderr, ", ");
- fprintf(stderr, "def");
- }
if (info & MAY_BE_REF) {
if (first) first = 0; else fprintf(stderr, ", ");
fprintf(stderr, "ref");
diff --git a/ext/opcache/Optimizer/zend_func_info.c b/ext/opcache/Optimizer/zend_func_info.c
index 43bf01c0f8..e94282d68f 100644
--- a/ext/opcache/Optimizer/zend_func_info.c
+++ b/ext/opcache/Optimizer/zend_func_info.c
@@ -39,15 +39,15 @@ typedef struct _func_info_t {
#define F0(name, info) \
{name, sizeof(name)-1, (info), NULL}
#define F1(name, info) \
- {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_DEF | MAY_BE_RC1 | (info)), NULL}
+ {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | (info)), NULL}
#define FN(name, info) \
- {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_RCN | (info)), NULL}
+ {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_RCN | (info)), NULL}
#define FR(name, info) \
- {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_DEF | MAY_BE_REF | (info)), NULL}
+ {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_REF | (info)), NULL}
#define FX(name, info) \
- {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | (info)), NULL}
+ {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | (info)), NULL}
#define I1(name, info) \
- {name, sizeof(name)-1, (MAY_BE_DEF | MAY_BE_RC1 | (info)), NULL}
+ {name, sizeof(name)-1, (MAY_BE_RC1 | (info)), NULL}
#define FC(name, callback) \
{name, sizeof(name)-1, 0, callback}
@@ -56,7 +56,7 @@ static uint32_t zend_strlen_info(const zend_call_info *call_info, const zend_ssa
if (call_info->caller_init_opline->extended_value == call_info->num_args &&
call_info->num_args == 1) {
- uint32_t tmp = MAY_BE_DEF | MAY_BE_RC1;
+ uint32_t tmp = MAY_BE_RC1;
if (call_info->arg_info[0].opline) {
uint32_t arg_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
@@ -77,7 +77,7 @@ static uint32_t zend_strlen_info(const zend_call_info *call_info, const zend_ssa
return tmp;
} else {
/* warning, and returns NULL */
- return FUNC_MAY_WARN | MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_NULL;
+ return FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_NULL;
}
}
@@ -85,10 +85,10 @@ static uint32_t zend_dechex_info(const zend_call_info *call_info, const zend_ssa
{
if (call_info->caller_init_opline->extended_value == call_info->num_args &&
call_info->num_args == 1) {
- return MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_STRING;
+ return MAY_BE_RC1 | MAY_BE_STRING;
} else {
/* warning, and returns NULL */
- return FUNC_MAY_WARN | MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_NULL;
+ return FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_NULL;
}
}
@@ -100,7 +100,7 @@ static uint32_t zend_range_info(const zend_call_info *call_info, const zend_ssa
uint32_t t1 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
uint32_t t2 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
uint32_t t3 = 0;
- uint32_t tmp = MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG;
+ uint32_t tmp = MAY_BE_RC1 | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG;
if (call_info->num_args == 3) {
t3 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[2].opline);
@@ -124,7 +124,7 @@ static uint32_t zend_range_info(const zend_call_info *call_info, const zend_ssa
return tmp;
} else {
/* may warning, and return FALSE */
- return FUNC_MAY_WARN | MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING;
+ return FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING;
}
}
@@ -132,9 +132,9 @@ static uint32_t zend_is_type_info(const zend_call_info *call_info, const zend_ss
{
if (call_info->caller_init_opline->extended_value == call_info->num_args &&
call_info->num_args == 1) {
- return MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_TRUE | FUNC_MAY_INLINE;
+ return MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_TRUE | FUNC_MAY_INLINE;
} else {
- return MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_TRUE | FUNC_MAY_WARN;
+ return MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_TRUE | FUNC_MAY_WARN;
}
}
@@ -145,7 +145,7 @@ static uint32_t zend_l_ss_info(const zend_call_info *call_info, const zend_ssa *
uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
uint32_t arg2_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
- uint32_t tmp = MAY_BE_DEF | MAY_BE_RC1;
+ uint32_t tmp = MAY_BE_RC1;
if ((arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
(arg2_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT))) {
@@ -159,7 +159,7 @@ static uint32_t zend_l_ss_info(const zend_call_info *call_info, const zend_ssa *
return tmp;
} else {
/* warning, and returns NULL */
- return FUNC_MAY_WARN | MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_NULL | MAY_BE_LONG;
+ return FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_NULL | MAY_BE_LONG;
}
}
@@ -170,7 +170,7 @@ static uint32_t zend_lb_ssn_info(const zend_call_info *call_info, const zend_ssa
uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
uint32_t arg2_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
uint32_t arg3_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[2].opline);
- uint32_t tmp = MAY_BE_DEF | MAY_BE_RC1;
+ uint32_t tmp = MAY_BE_RC1;
if ((arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
(arg2_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
@@ -186,7 +186,7 @@ static uint32_t zend_lb_ssn_info(const zend_call_info *call_info, const zend_ssa
return tmp;
} else {
/* warning, and returns NULL */
- return FUNC_MAY_WARN | MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_NULL | MAY_BE_LONG;
+ return FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_NULL | MAY_BE_LONG;
}
}
@@ -196,7 +196,7 @@ static uint32_t zend_b_s_info(const zend_call_info *call_info, const zend_ssa *s
call_info->num_args == 1) {
uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
- uint32_t tmp = MAY_BE_DEF | MAY_BE_RC1;
+ uint32_t tmp = MAY_BE_RC1;
if (arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) {
tmp |= MAY_BE_FALSE | MAY_BE_TRUE;
@@ -208,7 +208,7 @@ static uint32_t zend_b_s_info(const zend_call_info *call_info, const zend_ssa *s
return tmp;
} else {
/* warning, and returns NULL */
- return FUNC_MAY_WARN | MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE;
+ return FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE;
}
}
@@ -1235,7 +1235,7 @@ uint32_t zend_get_func_info(const zend_call_info *call_info, const zend_ssa *ssa
}
}
if (!ret) {
- ret = MAY_BE_DEF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+ ret = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
if (call_info->callee_func->type == ZEND_INTERNAL_FUNCTION) {
ret |= FUNC_MAY_WARN;
}
diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c
index a81f2096b1..ccbc14a930 100644
--- a/ext/opcache/Optimizer/zend_inference.c
+++ b/ext/opcache/Optimizer/zend_inference.c
@@ -2127,13 +2127,13 @@ uint32_t zend_array_element_type(uint32_t t1, int write, int insert)
uint32_t tmp = 0;
if (t1 & MAY_BE_OBJECT) {
- tmp |= MAY_BE_DEF | MAY_BE_ANY | MAY_BE_REF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+ tmp |= MAY_BE_ANY | MAY_BE_REF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
}
if (t1 & MAY_BE_ARRAY) {
if (insert) {
- tmp |= MAY_BE_DEF | MAY_BE_NULL | MAY_BE_RCN;
+ tmp |= MAY_BE_NULL | MAY_BE_RCN;
} else {
- tmp |= MAY_BE_DEF | MAY_BE_NULL | ((t1 & MAY_BE_ARRAY_OF_ANY) >> MAY_BE_ARRAY_SHIFT);
+ tmp |= MAY_BE_NULL | ((t1 & MAY_BE_ARRAY_OF_ANY) >> MAY_BE_ARRAY_SHIFT);
if (tmp & MAY_BE_ARRAY) {
tmp |= MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
}
@@ -2145,13 +2145,13 @@ uint32_t zend_array_element_type(uint32_t t1, int write, int insert)
}
}
if (t1 & MAY_BE_STRING) {
- tmp |= MAY_BE_DEF | MAY_BE_STRING | MAY_BE_RC1;
+ tmp |= MAY_BE_STRING | MAY_BE_RC1;
if (write) {
tmp |= MAY_BE_NULL;
}
}
if (t1 & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE)) {
- tmp |= MAY_BE_DEF | MAY_BE_NULL | MAY_BE_RCN;
+ tmp |= MAY_BE_NULL | MAY_BE_RCN;
if (t1 & MAY_BE_ERROR) {
if (write) {
tmp |= MAY_BE_ERROR;
@@ -2159,7 +2159,7 @@ uint32_t zend_array_element_type(uint32_t t1, int write, int insert)
}
}
if (t1 & (MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_RESOURCE)) {
- tmp |= MAY_BE_DEF | MAY_BE_NULL | MAY_BE_RCN;
+ tmp |= MAY_BE_NULL | MAY_BE_RCN;
if (write) {
tmp |= MAY_BE_ERROR;
}
@@ -2208,7 +2208,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
switch (opline->opcode) {
case ZEND_ADD:
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
if ((t1 & MAY_BE_ANY) == MAY_BE_LONG &&
(t2 & MAY_BE_ANY) == MAY_BE_LONG) {
@@ -2240,7 +2240,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
break;
case ZEND_SUB:
case ZEND_MUL:
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
if ((t1 & MAY_BE_ANY) == MAY_BE_LONG &&
(t2 & MAY_BE_ANY) == MAY_BE_LONG) {
if (!ssa_var_info[ssa_ops[i].result_def].has_range ||
@@ -2261,7 +2261,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
break;
case ZEND_DIV:
case ZEND_POW:
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
if ((t1 & MAY_BE_ANY) == MAY_BE_DOUBLE ||
(t2 & MAY_BE_ANY) == MAY_BE_DOUBLE) {
tmp |= MAY_BE_DOUBLE;
@@ -2273,12 +2273,12 @@ static void zend_update_type_info(const zend_op_array *op_array,
UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
break;
case ZEND_MOD:
- tmp = MAY_BE_DEF|MAY_BE_RC1|MAY_BE_LONG;
+ tmp = MAY_BE_RC1 | MAY_BE_LONG;
/* Division by zero results in an exception, so it doesn't need any special handling */
UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
break;
case ZEND_BW_NOT:
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
if (t1 & MAY_BE_STRING) {
tmp |= MAY_BE_STRING;
}
@@ -2290,7 +2290,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_BW_OR:
case ZEND_BW_AND:
case ZEND_BW_XOR:
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
if ((t1 & MAY_BE_STRING) && (t2 & MAY_BE_STRING)) {
tmp |= MAY_BE_STRING;
}
@@ -2302,7 +2302,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_SL:
case ZEND_SR:
case ZEND_BEGIN_SILENCE:
- UPDATE_SSA_TYPE(MAY_BE_DEF|MAY_BE_RC1|MAY_BE_LONG, ssa_ops[i].result_def);
+ UPDATE_SSA_TYPE(MAY_BE_RC1|MAY_BE_LONG, ssa_ops[i].result_def);
break;
case ZEND_BOOL_NOT:
case ZEND_BOOL_XOR:
@@ -2322,10 +2322,10 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_ISSET_ISEMPTY_PROP_OBJ:
case ZEND_ISSET_ISEMPTY_STATIC_PROP:
case ZEND_ASSERT_CHECK:
- UPDATE_SSA_TYPE(MAY_BE_DEF|MAY_BE_RC1|MAY_BE_FALSE|MAY_BE_TRUE, ssa_ops[i].result_def);
+ UPDATE_SSA_TYPE(MAY_BE_RC1|MAY_BE_FALSE|MAY_BE_TRUE, ssa_ops[i].result_def);
break;
case ZEND_CAST:
- tmp = MAY_BE_DEF|MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
if (opline->extended_value == _IS_BOOL) {
tmp |= MAY_BE_TRUE|MAY_BE_FALSE;
} else {
@@ -2346,9 +2346,9 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_QM_ASSIGN:
case ZEND_COALESCE:
if (opline->op1_type == IS_CV || opline->op1_type == IS_VAR) {
- tmp = (MAY_BE_DEF | MAY_BE_RCN | t1) & ~(MAY_BE_UNDEF|MAY_BE_REF);
+ tmp = (MAY_BE_RCN | t1) & ~(MAY_BE_UNDEF|MAY_BE_REF);
} else {
- tmp = (MAY_BE_DEF | MAY_BE_RC1 | t1) & ~(MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_RCN);
+ tmp = (MAY_BE_RC1 | t1) & ~(MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_RCN);
}
if (t1 & MAY_BE_UNDEF) {
tmp |= MAY_BE_NULL;
@@ -2363,17 +2363,17 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_ASSIGN_ADD:
orig = 0;
if (opline->extended_value == ZEND_ASSIGN_OBJ) {
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
orig = t1;
t1 = MAY_BE_ANY;
t2 = OP1_DATA_INFO();
} else if (opline->extended_value == ZEND_ASSIGN_DIM) {
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
orig = t1;
t1 = zend_array_element_type(t1, 1, 0);
t2 = OP1_DATA_INFO();
} else {
- tmp = MAY_BE_DEF;
+ tmp = 0;
if (t1 & (MAY_BE_RC1|MAY_BE_RCN)) {
tmp |= MAY_BE_RC1;
if (ssa_ops[i].result_def >= 0) {
@@ -2459,12 +2459,12 @@ static void zend_update_type_info(const zend_op_array *op_array,
if (opline->extended_value == ZEND_ASSIGN_OBJ) {
goto unknown_opcode;
} else if (opline->extended_value == ZEND_ASSIGN_DIM) {
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
orig = t1;
t1 = zend_array_element_type(t1, 1, 0);
t2 = OP1_DATA_INFO();
} else {
- tmp = MAY_BE_DEF;
+ tmp = 0;
if (t1 & (MAY_BE_RC1|MAY_BE_RCN)) {
tmp |= MAY_BE_RC1;
if (ssa_ops[i].result_def >= 0) {
@@ -2519,12 +2519,12 @@ static void zend_update_type_info(const zend_op_array *op_array,
if (opline->extended_value == ZEND_ASSIGN_OBJ) {
goto unknown_opcode;
} else if (opline->extended_value == ZEND_ASSIGN_DIM) {
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
orig = t1;
t1 = zend_array_element_type(t1, 1, 0);
t2 = OP1_DATA_INFO();
} else {
- tmp = MAY_BE_DEF;
+ tmp = 0;
if (t1 & (MAY_BE_RC1|MAY_BE_RCN)) {
tmp |= MAY_BE_RC1;
if (ssa_ops[i].result_def >= 0) {
@@ -2570,12 +2570,12 @@ static void zend_update_type_info(const zend_op_array *op_array,
if (opline->extended_value == ZEND_ASSIGN_OBJ) {
goto unknown_opcode;
} else if (opline->extended_value == ZEND_ASSIGN_DIM) {
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
orig = t1;
t1 = zend_array_element_type(t1, 1, 0);
t2 = OP1_DATA_INFO();
} else {
- tmp = MAY_BE_DEF;
+ tmp = 0;
if (t1 & (MAY_BE_RC1|MAY_BE_RCN)) {
tmp |= MAY_BE_RC1;
if (ssa_ops[i].result_def >= 0) {
@@ -2615,12 +2615,12 @@ static void zend_update_type_info(const zend_op_array *op_array,
if (opline->extended_value == ZEND_ASSIGN_OBJ) {
goto unknown_opcode;
} else if (opline->extended_value == ZEND_ASSIGN_DIM) {
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
orig = t1;
t1 = zend_array_element_type(t1, 1, 0);
t2 = OP1_DATA_INFO();
} else {
- tmp = MAY_BE_DEF;
+ tmp = 0;
if (t1 & (MAY_BE_RC1|MAY_BE_RCN)) {
tmp |= MAY_BE_RC1;
if (ssa_ops[i].result_def >= 0) {
@@ -2659,12 +2659,12 @@ static void zend_update_type_info(const zend_op_array *op_array,
if (opline->extended_value == ZEND_ASSIGN_OBJ) {
goto unknown_opcode;
} else if (opline->extended_value == ZEND_ASSIGN_DIM) {
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
orig = t1;
t1 = zend_array_element_type(t1, 1, 0);
t2 = OP1_DATA_INFO();
} else {
- tmp = MAY_BE_DEF;
+ tmp = 0;
if (t1 & (MAY_BE_RC1|MAY_BE_RCN)) {
tmp |= MAY_BE_RC1;
if (ssa_ops[i].result_def >= 0) {
@@ -2705,12 +2705,12 @@ static void zend_update_type_info(const zend_op_array *op_array,
if (opline->extended_value == ZEND_ASSIGN_OBJ) {
goto unknown_opcode;
} else if (opline->extended_value == ZEND_ASSIGN_DIM) {
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
orig = t1;
t1 = zend_array_element_type(t1, 1, 0);
t2 = OP1_DATA_INFO();
} else {
- tmp = MAY_BE_DEF;
+ tmp = 0;
if (t1 & (MAY_BE_RC1|MAY_BE_RCN)) {
tmp |= MAY_BE_RC1;
if (ssa_ops[i].result_def >= 0) {
@@ -2758,7 +2758,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
// break;
case ZEND_PRE_INC:
case ZEND_PRE_DEC:
- tmp = MAY_BE_DEF;
+ tmp = 0;
if (t1 & MAY_BE_REF) {
tmp |= MAY_BE_REF;
}
@@ -2806,13 +2806,13 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_POST_INC:
case ZEND_POST_DEC:
if (ssa_ops[i].result_def >= 0) {
- tmp = (MAY_BE_DEF | MAY_BE_RC1 | t1) & ~(MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_RCN);
+ tmp = (MAY_BE_RC1 | t1) & ~(MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_RCN);
if (t1 & MAY_BE_UNDEF) {
tmp |= MAY_BE_NULL;
}
UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
}
- tmp = MAY_BE_DEF;
+ tmp = 0;
if (t1 & MAY_BE_REF) {
tmp |= MAY_BE_REF;
}
@@ -2853,7 +2853,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
break;
case ZEND_ASSIGN_DIM:
if (opline->op1_type == IS_CV) {
- tmp = MAY_BE_DEF | (t1 & (MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF));
+ tmp = (t1 & (MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF));
tmp &= ~MAY_BE_NULL;
if (t1 & (MAY_BE_UNDEF | MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING)) {
tmp |= MAY_BE_ARRAY;
@@ -2882,7 +2882,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
}
}
if (ssa_ops[i].result_def >= 0) {
- tmp = MAY_BE_DEF;
+ tmp = 0;
if (t1 & MAY_BE_STRING) {
tmp |= MAY_BE_STRING;
}
@@ -2899,7 +2899,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
opline++;
i++;
tmp = OP1_INFO();
- if (tmp & MAY_BE_DEF) {
+ if (tmp & (MAY_BE_ANY | MAY_BE_REF)) {
if (tmp & MAY_BE_RC1) {
if (t2 & (MAY_BE_RC1|MAY_BE_RCN)) {
tmp |= MAY_BE_RCN;
@@ -2911,7 +2911,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
break;
case ZEND_ASSIGN_OBJ:
if (opline->op1_type == IS_CV) {
- tmp = MAY_BE_DEF | (t1 & (MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF));
+ tmp = (t1 & (MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF));
tmp &= ~MAY_BE_NULL;
if (t1 & (MAY_BE_UNDEF | MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING)) {
tmp |= MAY_BE_OBJECT;
@@ -2928,14 +2928,14 @@ static void zend_update_type_info(const zend_op_array *op_array,
}
if (ssa_ops[i].result_def >= 0) {
// TODO: ???
- tmp = MAY_BE_DEF | MAY_BE_REF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+ tmp = MAY_BE_REF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
}
if ((opline+1)->op1_type == IS_CV) {
opline++;
i++;
tmp = OP1_INFO();
- if (tmp & MAY_BE_DEF) {
+ if (tmp & (MAY_BE_ANY | MAY_BE_REF)) {
if (tmp & MAY_BE_RC1) {
if (t2 & (MAY_BE_RC1|MAY_BE_RCN)) {
tmp |= MAY_BE_RCN;
@@ -2948,7 +2948,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_ASSIGN:
if (opline->op2_type == IS_CV) {
tmp = t2;
- if (tmp & MAY_BE_DEF) {
+ if (tmp & (MAY_BE_ANY | MAY_BE_REF)) {
if (tmp & MAY_BE_RC1) {
if (t2 & (MAY_BE_RC1|MAY_BE_RCN)) {
tmp |= MAY_BE_RCN;
@@ -2957,7 +2957,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
}
UPDATE_SSA_TYPE(tmp, ssa_ops[i].op2_def);
}
- tmp = (MAY_BE_DEF | t2) & ~(MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN);
+ tmp = t2 & ~(MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN);
if (t2 & MAY_BE_UNDEF) {
tmp |= MAY_BE_NULL;
}
@@ -3025,16 +3025,16 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_ASSIGN_REF:
// TODO: ???
if (opline->op2_type == IS_CV) {
- tmp = (MAY_BE_DEF | MAY_BE_REF | t2) & ~(MAY_BE_UNDEF|MAY_BE_RC1|MAY_BE_RCN);
+ tmp = (MAY_BE_REF | t2) & ~(MAY_BE_UNDEF|MAY_BE_RC1|MAY_BE_RCN);
if (t2 & MAY_BE_UNDEF) {
tmp |= MAY_BE_NULL;
}
UPDATE_SSA_TYPE(tmp, ssa_ops[i].op2_def);
}
if (opline->op2_type == IS_VAR && opline->extended_value == ZEND_RETURNS_FUNCTION) {
- tmp = (MAY_BE_DEF | MAY_BE_REF | MAY_BE_RCN | MAY_BE_RC1 | t2) & ~MAY_BE_UNDEF;
+ tmp = (MAY_BE_REF | MAY_BE_RCN | MAY_BE_RC1 | t2) & ~MAY_BE_UNDEF;
} else {
- tmp = (MAY_BE_DEF | MAY_BE_REF | t2) & ~(MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN);
+ tmp = (MAY_BE_REF | t2) & ~(MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN);
}
if (t2 & MAY_BE_UNDEF) {
tmp |= MAY_BE_NULL;
@@ -3045,7 +3045,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
}
break;
case ZEND_BIND_GLOBAL:
- tmp = (MAY_BE_DEF | MAY_BE_REF | MAY_BE_ANY );
+ tmp = (MAY_BE_REF | MAY_BE_ANY );
UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def);
break;
case ZEND_SEND_VAR:
@@ -3061,7 +3061,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_SEND_REF:
// TODO: ???
if (ssa_ops[i].op1_def >= 0) {
- tmp = (t1 & MAY_BE_UNDEF)|MAY_BE_DEF|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF;
+ tmp = (t1 & MAY_BE_UNDEF)|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF;
UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def);
}
break;
@@ -3069,11 +3069,11 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_ROPE_INIT:
case ZEND_ROPE_ADD:
case ZEND_ROPE_END:
- UPDATE_SSA_TYPE(MAY_BE_DEF|MAY_BE_RC1|MAY_BE_STRING, ssa_ops[i].result_def);
+ UPDATE_SSA_TYPE(MAY_BE_RC1|MAY_BE_STRING, ssa_ops[i].result_def);
break;
case ZEND_CONCAT:
/* TODO: +MAY_BE_OBJECT ??? */
- UPDATE_SSA_TYPE(MAY_BE_DEF|MAY_BE_RC1|MAY_BE_STRING, ssa_ops[i].result_def);
+ UPDATE_SSA_TYPE(MAY_BE_RC1|MAY_BE_STRING, ssa_ops[i].result_def);
break;
case ZEND_RECV:
case ZEND_RECV_INIT:
@@ -3087,7 +3087,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
ce = NULL;
if (arg_info) {
- tmp = MAY_BE_DEF;
+ tmp = 0;
if (arg_info->class_name) {
// class type hinting...
zend_string *lcname = zend_string_tolower(arg_info->class_name);
@@ -3127,11 +3127,11 @@ static void zend_update_type_info(const zend_op_array *op_array,
tmp |= MAY_BE_RC1|MAY_BE_RCN;
}
} else {
- tmp = MAY_BE_DEF|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF;
+ tmp = MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF;
}
func_info = ZEND_FUNC_INFO(op_array);
if (func_info && (int)opline->op1.num-1 < func_info->num_args) {
- tmp = (tmp & (MAY_BE_DEF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF)) |
+ tmp = (tmp & (MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF)) |
(tmp & func_info->arg_info[opline->op1.num-1].info.type);
} else {
if (opline->opcode == ZEND_RECV && (!arg_info || arg_info->type_hint == IS_UNDEF)) {
@@ -3219,7 +3219,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
}
break;
case ZEND_NEW:
- tmp = MAY_BE_DEF|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_OBJECT;
+ tmp = MAY_BE_RC1|MAY_BE_RCN|MAY_BE_OBJECT;
if (opline->op1_type == IS_CONST &&
(ce = zend_hash_find_ptr(CG(class_table), Z_STR_P(CRT_CONSTANT_EX(op_array, opline->op1, ssa->rt_constants)+1))) != NULL) {
UPDATE_SSA_OBJ_TYPE(ce, 0, ssa_ops[i].result_def);
@@ -3231,7 +3231,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
break;
case ZEND_CLONE:
- UPDATE_SSA_TYPE(MAY_BE_DEF|MAY_BE_OBJECT, ssa_ops[i].result_def);
+ UPDATE_SSA_TYPE(MAY_BE_OBJECT, ssa_ops[i].result_def);
if ((t1 & MAY_BE_OBJECT) && ssa_ops[i].op1_use >= 0 && ssa_var_info[ssa_ops[i].op1_use].ce) {
UPDATE_SSA_OBJ_TYPE(ssa_var_info[ssa_ops[i].op1_use].ce, ssa_var_info[ssa_ops[i].op1_use].is_instanceof, ssa_ops[i].result_def);
} else {
@@ -3242,17 +3242,17 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_ADD_ARRAY_ELEMENT:
if (opline->op1_type == IS_CV) {
if (opline->extended_value & ZEND_ARRAY_ELEMENT_REF) {
- tmp = (MAY_BE_DEF | MAY_BE_REF | t1) & ~(MAY_BE_UNDEF|MAY_BE_RC1|MAY_BE_RCN);
+ tmp = (MAY_BE_REF | t1) & ~(MAY_BE_UNDEF|MAY_BE_RC1|MAY_BE_RCN);
if (t1 & MAY_BE_UNDEF) {
tmp |= MAY_BE_NULL;
}
} else if ((t1 & (MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN)) == MAY_BE_REF) {
- tmp = (MAY_BE_DEF | MAY_BE_REF | t1) & ~(MAY_BE_UNDEF|MAY_BE_RC1|MAY_BE_RCN);
+ tmp = (MAY_BE_REF | t1) & ~(MAY_BE_UNDEF|MAY_BE_RC1|MAY_BE_RCN);
if (t1 & MAY_BE_UNDEF) {
tmp |= MAY_BE_NULL;
}
} else if (t1 & MAY_BE_REF) {
- tmp = (MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | t1);
+ tmp = (MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | t1);
} else {
tmp = t1;
if (t1 & MAY_BE_RC1) {
@@ -3262,7 +3262,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def);
}
if (ssa_ops[i].result_def >= 0) {
- tmp = MAY_BE_DEF|MAY_BE_RC1|MAY_BE_ARRAY;
+ tmp = MAY_BE_RC1|MAY_BE_ARRAY;
if (opline->op1_type != IS_UNUSED) {
tmp |= (t1 & MAY_BE_ANY) << MAY_BE_ARRAY_SHIFT;
if (opline->extended_value & ZEND_ARRAY_ELEMENT_REF) {
@@ -3332,11 +3332,11 @@ static void zend_update_type_info(const zend_op_array *op_array,
}
if (opline->opcode == ZEND_FE_RESET_RW) {
//???
- tmp = MAY_BE_DEF | MAY_BE_REF | (t1 & (MAY_BE_ARRAY | MAY_BE_OBJECT));
+ tmp = MAY_BE_REF | (t1 & (MAY_BE_ARRAY | MAY_BE_OBJECT));
} else if (opline->op1_type == IS_TMP_VAR || opline->op1_type == IS_CONST) {
- tmp = MAY_BE_DEF | MAY_BE_RC1 | (t1 & (MAY_BE_ARRAY | MAY_BE_OBJECT | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF));
+ tmp = MAY_BE_RC1 | (t1 & (MAY_BE_ARRAY | MAY_BE_OBJECT | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF));
} else {
- tmp = MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_RCN | (t1 & (MAY_BE_REF | MAY_BE_ARRAY | MAY_BE_OBJECT | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF));
+ tmp = MAY_BE_RC1 | MAY_BE_RCN | (t1 & (MAY_BE_REF | MAY_BE_ARRAY | MAY_BE_OBJECT | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF));
}
UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
if ((t1 & MAY_BE_OBJECT) && ssa_ops[i].op1_use >= 0 && ssa_var_info[ssa_ops[i].op1_use].ce) {
@@ -3349,15 +3349,15 @@ static void zend_update_type_info(const zend_op_array *op_array,
case ZEND_FE_FETCH_RW:
if (t1 & MAY_BE_OBJECT) {
if (opline->opcode == ZEND_FE_FETCH_RW) {
- tmp = MAY_BE_DEF | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+ tmp = MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
} else {
- tmp = MAY_BE_DEF | MAY_BE_REF | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+ tmp = MAY_BE_REF | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
}
} else if (t1 & MAY_BE_ARRAY) {
if (opline->opcode == ZEND_FE_FETCH_RW) {
- tmp = MAY_BE_DEF | MAY_BE_REF | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+ tmp = MAY_BE_REF | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
} else {
- tmp = MAY_BE_DEF | ((t1 & MAY_BE_ARRAY_OF_ANY) >> MAY_BE_ARRAY_SHIFT);
+ tmp = ((t1 & MAY_BE_ARRAY_OF_ANY) >> MAY_BE_ARRAY_SHIFT);
if (tmp & MAY_BE_ARRAY) {
tmp |= MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
}
@@ -3369,15 +3369,15 @@ static void zend_update_type_info(const zend_op_array *op_array,
}
} else {
if (opline->opcode == ZEND_FE_FETCH_RW) {
- tmp = MAY_BE_DEF | MAY_BE_REF;
+ tmp = MAY_BE_REF;
} else {
- tmp = MAY_BE_DEF | MAY_BE_RCN;
+ tmp = MAY_BE_RCN;
}
}
UPDATE_SSA_TYPE(tmp, ssa_ops[i].op2_def);
if (opline->result_type == IS_TMP_VAR) {
if (ssa_ops[i].result_def >= 0) {
- tmp = MAY_BE_DEF | MAY_BE_RC1;
+ tmp = MAY_BE_RC1;
if (t1 & MAY_BE_OBJECT) {
tmp |= MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
} else if (t1 & MAY_BE_ARRAY) {
@@ -3422,7 +3422,6 @@ static void zend_update_type_info(const zend_op_array *op_array,
tmp |= MAY_BE_ARRAY;
}
}
- tmp |= MAY_BE_DEF;
if (tmp & MAY_BE_RCN) {
tmp |= MAY_BE_RC1;
}
@@ -3528,7 +3527,6 @@ static void zend_update_type_info(const zend_op_array *op_array,
tmp |= MAY_BE_OBJECT;
}
}
- tmp |= MAY_BE_DEF;
if (tmp & MAY_BE_RCN) {
tmp |= MAY_BE_RC1;
}
@@ -3541,7 +3539,7 @@ static void zend_update_type_info(const zend_op_array *op_array,
}
}
if (ssa_ops[i].result_def >= 0) {
- tmp = MAY_BE_DEF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ERROR;
+ tmp = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ERROR;
if (opline->result_type == IS_TMP_VAR) {
tmp |= MAY_BE_RC1;
} else {
@@ -3583,10 +3581,10 @@ static void zend_update_type_info(const zend_op_array *op_array,
break;
case ZEND_FETCH_CONSTANT:
case ZEND_FETCH_CLASS_CONSTANT:
- UPDATE_SSA_TYPE(MAY_BE_DEF|MAY_BE_RC1|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_RESOURCE|MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY, ssa_ops[i].result_def);
+ UPDATE_SSA_TYPE(MAY_BE_RC1|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_RESOURCE|MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY, ssa_ops[i].result_def);
break;
case ZEND_STRLEN:
- tmp = MAY_BE_DEF|MAY_BE_RC1|MAY_BE_LONG;
+ tmp = MAY_BE_RC1|MAY_BE_LONG;
if (t1 & (MAY_BE_ANY - (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT))) {
tmp |= MAY_BE_NULL;
}
@@ -3594,16 +3592,16 @@ static void zend_update_type_info(const zend_op_array *op_array,
break;
case ZEND_TYPE_CHECK:
case ZEND_DEFINED:
- UPDATE_SSA_TYPE(MAY_BE_DEF|MAY_BE_RC1|MAY_BE_FALSE|MAY_BE_TRUE, ssa_ops[i].result_def);
+ UPDATE_SSA_TYPE(MAY_BE_RC1|MAY_BE_FALSE|MAY_BE_TRUE, ssa_ops[i].result_def);
break;
default:
unknown_opcode:
if (ssa_ops[i].op1_def >= 0) {
- tmp = MAY_BE_DEF | MAY_BE_ANY | MAY_BE_REF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+ tmp = MAY_BE_ANY | MAY_BE_REF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def);
}
if (ssa_ops[i].result_def >= 0) {
- tmp = MAY_BE_DEF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+ tmp = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
if (opline->result_type == IS_TMP_VAR) {
tmp |= MAY_BE_RC1;
} else {
@@ -3833,7 +3831,7 @@ void zend_func_return_info(const zend_op_array *op_array,
int tmp_has_range = -1;
if (op_array->fn_flags & ZEND_ACC_GENERATOR) {
- ret->type = MAY_BE_OBJECT | MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_RCN;
+ ret->type = MAY_BE_OBJECT | MAY_BE_RC1 | MAY_BE_RCN;
ret->ce = zend_ce_generator;
ret->is_instanceof = 0;
ret->range = tmp_range;
@@ -3861,10 +3859,10 @@ void zend_func_return_info(const zend_op_array *op_array,
t1 |= MAY_BE_NULL;
}
if (opline->opcode == ZEND_RETURN) {
- t1 |= MAY_BE_DEF | MAY_BE_RC1 | MAY_BE_RCN;
+ t1 |= MAY_BE_RC1 | MAY_BE_RCN;
t1 &= ~(MAY_BE_UNDEF | MAY_BE_REF);
} else {
- t1 |= MAY_BE_DEF | MAY_BE_REF;
+ t1 |= MAY_BE_REF;
t1 &= ~(MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN);
}
tmp |= t1;
@@ -4050,9 +4048,9 @@ int zend_ssa_inference(zend_arena **arena, const zend_op_array *op_array, const
for (i = 0; i < op_array->last_var; i++) {
if (!op_array->function_name) {
- ssa_var_info[i].type = MAY_BE_DEF | MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+ ssa_var_info[i].type = MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
} else if (i == EX_VAR_TO_NUM(op_array->this_var)) {
- ssa_var_info[i].type = MAY_BE_DEF | MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_OBJECT;
+ ssa_var_info[i].type = MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_OBJECT;
ssa_var_info[i].ce = op_array->scope;
ssa_var_info[i].is_instanceof = 1;
} else {
diff --git a/ext/opcache/Optimizer/zend_inference.h b/ext/opcache/Optimizer/zend_inference.h
index 9e86f48b8b..0ac01bfbe8 100644
--- a/ext/opcache/Optimizer/zend_inference.h
+++ b/ext/opcache/Optimizer/zend_inference.h
@@ -60,8 +60,7 @@
#define MAY_BE_IN_REG (1<<25) /* value allocated in CPU register */
-//TODO: remome MAY_BE_DEF, MAY_BE_RC1, MAY_BE_RCN???
-#define MAY_BE_DEF (1<<26)
+//TODO: remome MAY_BE_RC1, MAY_BE_RCN???
#define MAY_BE_RC1 (1<<27) /* may be non-reference with refcount == 1 */
#define MAY_BE_RCN (1<<28) /* may be non-reference with refcount > 1 */
@@ -195,7 +194,7 @@ static zend_always_inline uint32_t _const_op_type(const zval *zv) {
return MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY;
} else if (Z_TYPE_P(zv) == IS_ARRAY) {
HashTable *ht = Z_ARRVAL_P(zv);
- uint32_t tmp = MAY_BE_ARRAY | MAY_BE_DEF | MAY_BE_RC1;
+ uint32_t tmp = MAY_BE_ARRAY | MAY_BE_RC1;
zend_string *str;
zval *val;
@@ -209,7 +208,7 @@ static zend_always_inline uint32_t _const_op_type(const zval *zv) {
} ZEND_HASH_FOREACH_END();
return tmp;
} else {
- return (1 << Z_TYPE_P(zv)) | MAY_BE_DEF | MAY_BE_RC1;
+ return (1 << Z_TYPE_P(zv)) | MAY_BE_RC1;
}
}
@@ -218,7 +217,7 @@ static zend_always_inline uint32_t get_ssa_var_info(const zend_ssa *ssa, int ssa
if (ssa->var_info && ssa_var_num >= 0) {
return ssa->var_info[ssa_var_num].type;
} else {
- return MAY_BE_DEF | MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ERROR;
+ return MAY_BE_UNDEF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ERROR;
}
}