]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.2'
authorDmitry Stogov <dmitry@zend.com>
Tue, 10 Oct 2017 16:37:40 +0000 (19:37 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 10 Oct 2017 16:37:40 +0000 (19:37 +0300)
* PHP-7.2:
  Fixed cleanup after optimization passes

1  2 
ext/opcache/Optimizer/compact_vars.c
ext/opcache/Optimizer/dce.c

index 016fbfffbcafeb2eca948e95a6f10acbbd19073a,caf121942d6e5113c5262443c2fda7861e0d2131..7bcf0b8a2846c39ededb7c8c3466dc0628a65209
@@@ -105,21 -93,26 +105,29 @@@ void zend_optimizer_compact_vars(zend_o
        }
  
        /* Update CV name table */
 -      if (num_cvs) {
 -              zend_string **names = safe_emalloc(sizeof(zend_string *), num_cvs, 0);
 -              for (i = 0; i < op_array->last_var; i++) {
 -                      if (cv_map[i] != (uint32_t) -1) {
 -                              names[cv_map[i]] = op_array->vars[i];
 -                      } else {
 +      if (num_cvs != op_array->last_var) {
-               zend_string **names = safe_emalloc(sizeof(zend_string *), num_cvs, 0);
-               for (i = 0; i < op_array->last_var; i++) {
-                       if (vars_map[i] != (uint32_t) -1) {
-                               names[vars_map[i]] = op_array->vars[i];
-                       } else {
++              if (num_cvs) {
++                      zend_string **names = safe_emalloc(sizeof(zend_string *), num_cvs, 0);
++                      for (i = 0; i < op_array->last_var; i++) {
++                              if (vars_map[i] != (uint32_t) -1) {
++                                      names[vars_map[i]] = op_array->vars[i];
++                              } else {
++                                      zend_string_release(op_array->vars[i]);
++                              }
++                      }
++                      efree(op_array->vars);
++                      op_array->vars = names;
++              } else {
++                      for (i = 0; i < op_array->last_var; i++) {
                                zend_string_release(op_array->vars[i]);
                        }
++                      efree(op_array->vars);
++                      op_array->vars = NULL;
                }
--              efree(op_array->vars);
--              op_array->vars = names;
 -      } else {
 -              for (i = 0; i < op_array->last_var; i++) {
 -                      zend_string_release(op_array->vars[i]);
 -              }
 -              efree(op_array->vars);
 -              op_array->vars = NULL;
++              op_array->last_var = num_cvs;
        }
  
--      op_array->last_var = num_cvs;
 +      op_array->T = num_tmps;
  
 -      free_alloca(cv_map, use_heap2);
 +      free_alloca(vars_map, use_heap2);
  }
Simple merge