]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.0' into PHP-7.1
authorNikita Popov <nikic@php.net>
Thu, 10 Nov 2016 21:18:42 +0000 (22:18 +0100)
committerNikita Popov <nikic@php.net>
Thu, 10 Nov 2016 21:19:48 +0000 (22:19 +0100)
1  2 
ext/opcache/Optimizer/optimize_func_calls.c

index f98149a09ebda4ff9655545a1eba20373fdccc67,ccac5b9fbc37c5db7ee4bcf681fa06535abb7f57..6f267df9b3aaf616cfd54fe0a7de8a1a89af76a2
@@@ -216,18 -110,17 +216,26 @@@ void zend_optimize_func_calls(zend_op_a
                                if (call_stack[call - 1].func) {
                                        if (ARG_SHOULD_BE_SENT_BY_REF(call_stack[call - 1].func, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
                                                opline->extended_value &= ZEND_FETCH_TYPE_MASK;
 -                                              opline->opcode -= 9;
 +                                              if (opline->opcode != ZEND_FETCH_STATIC_PROP_FUNC_ARG) {
 +                                                      opline->opcode -= 9;
 +                                              } else {
 +                                                      opline->opcode = ZEND_FETCH_STATIC_PROP_W;
 +                                              }
                                        } else {
+                                               if (opline->opcode == ZEND_FETCH_DIM_FUNC_ARG
+                                                               && opline->op2_type == IS_UNUSED) {
+                                                       /* FETCH_DIM_FUNC_ARG supports UNUSED op2, while FETCH_DIM_R does not.
+                                                        * Performing the replacement would create an invalid opcode. */
++                                                      call_stack[call - 1].try_inline = 0;
+                                                       break;
+                                               }
                                                opline->extended_value &= ZEND_FETCH_TYPE_MASK;
 -                                              opline->opcode -= 12;
 +                                              if (opline->opcode != ZEND_FETCH_STATIC_PROP_FUNC_ARG) {
 +                                                      opline->opcode -= 12;
 +                                              } else {
 +                                                      opline->opcode = ZEND_FETCH_STATIC_PROP_R;
 +                                              }
                                        }
                                }
                                break;