]> granicus.if.org Git - php/commitdiff
After DFA pass result of FE_FETCH may be CV
authorDmitry Stogov <dmitry@zend.com>
Tue, 9 Feb 2016 09:16:17 +0000 (12:16 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 9 Feb 2016 09:16:17 +0000 (12:16 +0300)
ext/opcache/Optimizer/zend_inference.c

index aa78e3e7c34b0b05b0813fc9c472bed1ce379f3c..2dab5aa9548d4355fd301728307f4443b2b81d48 100644 (file)
@@ -3427,24 +3427,22 @@ static void zend_update_type_info(const zend_op_array *op_array,
                                }
                        }
                        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_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) {
-                                               if (t1 & MAY_BE_ARRAY_KEY_LONG) {
-                                                       tmp |= MAY_BE_LONG;
-                                               }
-                                               if (t1 & MAY_BE_ARRAY_KEY_STRING) {
-                                                       tmp |= MAY_BE_STRING;
-                                               }
-                                               if (!(tmp & (MAY_BE_LONG|MAY_BE_STRING))) {
-                                                       tmp |= MAY_BE_NULL;
-                                               }
+                       if (ssa_ops[i].result_def >= 0) {
+                               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) {
+                                       if (t1 & MAY_BE_ARRAY_KEY_LONG) {
+                                               tmp |= MAY_BE_LONG;
+                                       }
+                                       if (t1 & MAY_BE_ARRAY_KEY_STRING) {
+                                               tmp |= MAY_BE_STRING;
+                                       }
+                                       if (!(tmp & (MAY_BE_LONG|MAY_BE_STRING))) {
+                                               tmp |= MAY_BE_NULL;
                                        }
-                                       UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
                                }
+                               UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
                        }
                        break;
 //             case ZEND_CATCH: