]> granicus.if.org Git - php/commitdiff
Don't keep QM_ASSIGN with IS_UNUSED result
authorDmitry Stogov <dmitry@zend.com>
Fri, 29 Nov 2019 14:43:36 +0000 (17:43 +0300)
committerDmitry Stogov <dmitry@zend.com>
Fri, 29 Nov 2019 14:43:36 +0000 (17:43 +0300)
ext/opcache/Optimizer/block_pass.c

index b4cd2407ba546732d614e311c7a7b466f4156d61..b6af541eac6e9bb2d68e1cd6a4cd714dc46ee93a 100644 (file)
@@ -270,6 +270,13 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
                                                src->result_type = IS_UNUSED;
                                                MAKE_NOP(opline);
                                                ++(*opt_count);
+                                               if (src->opcode == ZEND_QM_ASSIGN) {
+                                                       if (src->op1_type & (IS_VAR|IS_TMP_VAR)) {
+                                                               src->opcode = ZEND_FREE;
+                                                       } else {
+                                                               MAKE_NOP(src);
+                                                       }
+                                               }
                                        }
                                }
                                break;