Lines 1-30
Link Here
|
1 |
--- Optimizer/zend_inference.c.orig 2017-12-12 12:05:15 UTC |
|
|
2 |
+++ Optimizer/zend_inference.c |
3 |
@@ -2928,7 +2928,7 @@ static int zend_update_type_info(const z |
4 |
break; |
5 |
case ZEND_FE_FETCH_R: |
6 |
case ZEND_FE_FETCH_RW: |
7 |
- tmp = (t2 & MAY_BE_REF); |
8 |
+ tmp = t2; |
9 |
if (t1 & MAY_BE_OBJECT) { |
10 |
if (opline->opcode == ZEND_FE_FETCH_RW) { |
11 |
tmp |= MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; |
12 |
@@ -2953,7 +2953,7 @@ static int zend_update_type_info(const z |
13 |
} |
14 |
UPDATE_SSA_TYPE(tmp, ssa_ops[i].op2_def); |
15 |
if (ssa_ops[i].result_def >= 0) { |
16 |
- tmp = 0; |
17 |
+ tmp = (ssa_ops[i].result_use >= 0) ? RES_USE_INFO() : 0; |
18 |
if (t1 & MAY_BE_OBJECT) { |
19 |
tmp |= MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; |
20 |
} |
21 |
@@ -3079,7 +3079,8 @@ static int zend_update_type_info(const z |
22 |
UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def); |
23 |
} else { |
24 |
/* invalid key type */ |
25 |
- UPDATE_SSA_TYPE(t1, ssa_ops[i].op1_def); |
26 |
+ tmp = (tmp & (MAY_BE_RC1|MAY_BE_RCN)) | (t1 & ~(MAY_BE_RC1|MAY_BE_RCN)); |
27 |
+ UPDATE_SSA_TYPE(tmp, ssa_ops[i].op1_def); |
28 |
} |
29 |
COPY_SSA_OBJ_TYPE(ssa_ops[i].op1_use, ssa_ops[i].op1_def); |
30 |
} |