]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.1'
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 14 Apr 2017 20:04:07 +0000 (22:04 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 14 Apr 2017 20:04:07 +0000 (22:04 +0200)
1  2 
ext/opcache/Optimizer/dfa_pass.c

index 20fe1d6d21dac760b8ed2604a2d65513a66e0bc7,4e4260660c0fadc556188239577c3bea9df00117..438d7b92badb21040da7c5344d27a4156e8c1a53
@@@ -162,10 -162,44 +162,14 @@@ static void zend_ssa_remove_nops(zend_o
                                zend_op *opline;
                                zend_op *new_opline;
  
-                               opline = op_array->opcodes + end - 1;
                                b->len = target - b->start;
+                               opline = op_array->opcodes + end - 1;
+                               if (opline->opcode == ZEND_NOP) {
+                                       continue;
+                               }
                                new_opline = op_array->opcodes + target - 1;
 -                              switch (new_opline->opcode) {
 -                                      case ZEND_JMP:
 -                                      case ZEND_FAST_CALL:
 -                                              ZEND_SET_OP_JMP_ADDR(new_opline, new_opline->op1, ZEND_OP1_JMP_ADDR(opline));
 -                                              break;
 -                                      case ZEND_JMPZNZ:
 -                                              new_opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value));
 -                                              /* break missing intentionally */
 -                                      case ZEND_JMPZ:
 -                                      case ZEND_JMPNZ:
 -                                      case ZEND_JMPZ_EX:
 -                                      case ZEND_JMPNZ_EX:
 -                                      case ZEND_FE_RESET_R:
 -                                      case ZEND_FE_RESET_RW:
 -                                      case ZEND_JMP_SET:
 -                                      case ZEND_COALESCE:
 -                                      case ZEND_ASSERT_CHECK:
 -                                              ZEND_SET_OP_JMP_ADDR(new_opline, new_opline->op2, ZEND_OP2_JMP_ADDR(opline));
 -                                              break;
 -                                      case ZEND_CATCH:
 -                                              if (!opline->result.num) {
 -                                                      new_opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value));
 -                                              }
 -                                              break;
 -                                      case ZEND_DECLARE_ANON_CLASS:
 -                                      case ZEND_DECLARE_ANON_INHERITED_CLASS:
 -                                      case ZEND_FE_FETCH_R:
 -                                      case ZEND_FE_FETCH_RW:
 -                                              new_opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value));
 -                                              break;
 -                              }
 +                              zend_optimizer_migrate_jump(op_array, new_opline, opline);
                        }
                }
        }