}
} else if (opline->opcode == ZEND_ASSIGN_OBJ_OP) {
if (opline->op1_type == IS_CV) {
- if (orig & MAY_BE_OBJECT) {
- orig |= (MAY_BE_RC1|MAY_BE_RCN);
- }
- UPDATE_SSA_TYPE(orig, ssa_op->op1_def);
+ tmp = (orig & (MAY_BE_REF|MAY_BE_OBJECT))|MAY_BE_RC1|MAY_BE_RCN;
+ UPDATE_SSA_TYPE(tmp, ssa_op->op1_def);
COPY_SSA_OBJ_TYPE(ssa_op->op1_use, ssa_op->op1_def);
}
} else if (opline->opcode == ZEND_ASSIGN_STATIC_PROP) {
break;
case ZEND_ASSIGN_OBJ:
if (opline->op1_type == IS_CV) {
- tmp = t1;
- if (tmp & MAY_BE_OBJECT) {
- tmp |= MAY_BE_RC1 | MAY_BE_RCN;
- }
+ tmp = (t1 & (MAY_BE_REF|MAY_BE_OBJECT))|MAY_BE_RC1|MAY_BE_RCN;
UPDATE_SSA_TYPE(tmp, ssa_op->op1_def);
COPY_SSA_OBJ_TYPE(ssa_op->op1_use, ssa_op->op1_def);
}
case ZEND_POST_INC_OBJ:
case ZEND_POST_DEC_OBJ:
if (opline->op1_type == IS_CV) {
- tmp = t1;
- if (tmp & MAY_BE_OBJECT) {
- tmp |= MAY_BE_RC1 | MAY_BE_RCN;
- }
+ tmp = (t1 & (MAY_BE_REF|MAY_BE_OBJECT))|MAY_BE_RC1|MAY_BE_RCN;
UPDATE_SSA_TYPE(tmp, ssa_op->op1_def);
COPY_SSA_OBJ_TYPE(ssa_op->op1_use, ssa_op->op1_def);
}
; %ssccp_022.php:1-10
L0 (10): RETURN int(1)
-foo: ; (lines=11, args=1, vars=2, tmps=1)
+foo: ; (lines=10, args=1, vars=2, tmps=1)
; (after optimizer)
; %ssccp_022.php:2-8
L0 (2): CV0($x) = RECV 1
L5 (5): ECHO string("5")
L6 (6): ASSIGN_OBJ CV1($a) string("foo")
L7 (6): OP_DATA int(5)
-L8 (7): T2 = FETCH_DIM_R CV1($a) int(1)
-L9 (7): ECHO T2
-L10 (8): RETURN null
+L8 (7): T2 = FETCH_DIM_R null int(1)
+L9 (8): RETURN null