tmp = zend_fetch_arg_info(script, ret_info, &ce);
tmp |= MAY_BE_RC1 | MAY_BE_RCN;
- if (opline->op1_type == IS_CONST) {
- UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
+ if (opline->op1_type & (IS_TMP_VAR|IS_VAR|IS_CV)) {
+ UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def);
if (ce) {
- UPDATE_SSA_OBJ_TYPE(ce, 1, ssa_ops[i].result_def);
+ UPDATE_SSA_OBJ_TYPE(ce, 1, ssa_ops[i].op1_def);
} else {
- UPDATE_SSA_OBJ_TYPE(NULL, 0, ssa_ops[i].result_def);
+ UPDATE_SSA_OBJ_TYPE(NULL, 0, ssa_ops[i].op1_def);
}
} else {
- UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def);
+ UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
if (ce) {
- UPDATE_SSA_OBJ_TYPE(ce, 1, ssa_ops[i].op1_def);
+ UPDATE_SSA_OBJ_TYPE(ce, 1, ssa_ops[i].result_def);
} else {
- UPDATE_SSA_OBJ_TYPE(NULL, 0, ssa_ops[i].op1_def);
+ UPDATE_SSA_OBJ_TYPE(NULL, 0, ssa_ops[i].result_def);
}
}
break;
}
break;
case ZEND_VERIFY_RETURN_TYPE:
- if (opline->op1_type != IS_CONST) {
+ if (opline->op1_type & (IS_TMP_VAR|IS_VAR|IS_CV)) {
ssa_ops[k].op1_def = ssa_vars_count;
var[EX_VAR_TO_NUM(opline->op1.var)] = ssa_vars_count;
ssa_vars_count++;