]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-5.4' into PHP-5.5
authorDmitry Stogov <dmitry@zend.com>
Wed, 27 Nov 2013 10:39:40 +0000 (14:39 +0400)
committerDmitry Stogov <dmitry@zend.com>
Wed, 27 Nov 2013 10:39:40 +0000 (14:39 +0400)
* PHP-5.4:
  Fixed bug #65969 (Chain assignment with T_LIST failure)

Conflicts:
NEWS
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

1  2 
NEWS
Zend/zend_execute.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --cc NEWS
index 9f83f9c6c2bdf2fe0b2838b72b4c077a29fbc1f4,ac573154699ca75392e3879078e4ee0fcad364da..36126b84654e06ba5909b8d38ac8102904ff1686
--- 1/NEWS
--- 2/NEWS
+++ b/NEWS
@@@ -12,47 -7,44 +12,48 @@@ PH
  - Core:
    . Fixed bug #66094 (unregister_tick_function tries to cast a Closure to a 
      string). (Laruence)
 -  . Fixed bug #65947 (basename is no more working after fgetcsv in certain 
 -    situation). (Laruence)
+   . Fixed bug #65969 (Chain assignment with T_LIST failure). (Dmitry)
  
 -- JSON
 -  . Fixed whitespace part of bug #64874 ("json_decode handles whitespace and
 -    case-sensitivity incorrectly"). (Andrea Faulds)
 +- OPCache
 +  . Fixed bug #66176 (Invalid constant substitution). (Dmitry)
 +  . Fixed bug #65915 (Inconsistent results with require return value). (Dmitry)
 +  . Fixed bug #65559 (Opcache: cache not cleared if changes occur while
 +    running). (Dmitry)
  
 -- MySQLi:
 -  . Fixed bug #66043 (Segfault calling bind_param() on mysqli). (Laruence)
 +- readline
 +  . Fixed Bug #65714 (PHP cli forces the tty to cooked mode). (Remi)
  
 -- mysqlnd:
 -  . Fixed bug #66124 (mysqli under mysqlnd loses precision when bind_param
 -    with 'i'). (Andrey)
 -  . Fixed bug #66141 (mysqlnd quote function is wrong with NO_BACKSLASH_ESCAPES
 -    after failed query). (Andrey)
 -
 -- PDO
 -  . Fixed bug 65946 (sql_parser permanently converts values bound to strings)
 -
 -14 Nov 2013, PHP 5.4.22
 +14 Nov 2013, PHP 5.5.6
  
  - Core:
 +  . Fixed bug #65947 (basename is no more working after fgetcsv in certain 
 +    situation). (Laruence)
 +  . Improved performance of array_merge() and func_get_args() by eliminating
 +    useless copying. (Dmitry)
 +  . Fixed bug #65939 (Space before ";" breaks php.ini parsing).
 +    (brainstorm at nopcode dot org)
    . Fixed bug #65911 (scope resolution operator - strange behavior with $this).
      (Bob Weinand)
 +  . Fixed bug #65936 (dangling context pointer causes crash). (Tony)
  
 -- CLI server:
 -  . Fixed bug #65818 (Segfault with built-in webserver and chunked transfer 
 -    encoding). (Felipe)
 +- FPM:
 +  . Changed default listen() backlog to 65535. (Tony)
  
 -- Exif:
 -  . Fixed crash on unknown encoding. (Draal)
 +- JSON
 +  . Fixed whitespace part of bug #64874 ("json_decode handles whitespace and
 +    case-sensitivity incorrectly"). (Andrea Faulds)
  
 -- FTP:
 -  . Fixed bug #65667 (ftp_nb_continue produces segfault). (Philip Hofstetter)
 +- MySQLi:
 +  . Fixed bug #66043 (Segfault calling bind_param() on mysqli). (Laruence)
  
 -- ODBC:
 -  . Fixed bug #65950 (Field name truncation if the field name is bigger than 
 +- OPcache
 +  . Increased limit for opcache.max_accelerated_files to 1,000,000. (Chris)
 +  . Fixed issue #115 (path issue when using phar). (Dmitry)
 +  . Fixed issue #149 (Phar mount points not working with OPcache enabled).
 +  (Dmitry)
 +
 +- ODBC
 +  . Fixed bug #65950 (Field name truncation if the field name is bigger than
      32 characters). (patch submitted by: michael dot y at zend dot com, Yasuo)
  
  - PDO:
Simple merge
index c2c3ae52195fbd122c23c1d5d886db21ddb8f894,b28cd51291a753f68e0fde6222e5a4a3a081759f..05557e9833628f78b7b18fe221f1e88036688c21
@@@ -1270,9 -1259,9 +1259,9 @@@ ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC
  
        SAVE_OPLINE();
  
 -      if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
 +      if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-               container = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
+               zval **container = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
                if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                }
index b21f6bf895101daf36a3a0bb188f82601fc3e903,c606b8819d867ca6c6f72348a7bbfd773d4a7535..ec29f9e7d8da4efb344515af3c8ed89164f9d2cc
@@@ -3479,36 -3391,6 +3479,25 @@@ static int ZEND_FASTCALL  ZEND_FETCH_IS
        return zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  }
  
-       zval **container;
 +static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +{
 +      USE_OPLINE
 +
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_CONST != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
++      zval *container;
 +
 +      SAVE_OPLINE();
 +
-       if (IS_CONST == IS_TMP_VAR || IS_CONST == IS_CONST) {
-               zval *container = opline->op1.zv;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
-       } else {
-               container = NULL;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
-       }
++      if (IS_CONST == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
++              PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
 +      }
++      container = opline->op1.zv;
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
 +
 +
 +      CHECK_EXCEPTION();
 +      ZEND_VM_NEXT_OPCODE();
 +}
 +
  static int ZEND_FASTCALL  ZEND_FETCH_DIM_TMP_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -4502,36 -4223,6 +4491,25 @@@ static int ZEND_FASTCALL  ZEND_BOOL_XOR
        ZEND_VM_NEXT_OPCODE();
  }
  
-       zval **container;
 +static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +{
 +      USE_OPLINE
 +      zend_free_op free_op2;
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_CONST != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_CONST == IS_TMP_VAR || IS_CONST == IS_CONST) {
-               zval *container = opline->op1.zv;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
-               zval_dtor(free_op2.var);
-       } else {
-               container = NULL;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
-               zval_dtor(free_op2.var);
++      zval *container;
 +
 +      SAVE_OPLINE();
 +
++      if (IS_CONST == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
++              PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
 +      }
++      container = opline->op1.zv;
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
++      zval_dtor(free_op2.var);
 +
 +      CHECK_EXCEPTION();
 +      ZEND_VM_NEXT_OPCODE();
 +}
 +
  static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -5366,36 -4899,6 +5344,25 @@@ static int ZEND_FASTCALL  ZEND_FETCH_IS
        return zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  }
  
-       zval **container;
 +static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +{
 +      USE_OPLINE
 +      zend_free_op free_op2;
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_CONST != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_CONST == IS_TMP_VAR || IS_CONST == IS_CONST) {
-               zval *container = opline->op1.zv;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
-       } else {
-               container = NULL;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
++      zval *container;
 +
 +      SAVE_OPLINE();
 +
++      if (IS_CONST == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
++              PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
 +      }
++      container = opline->op1.zv;
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
++      if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
 +
 +      CHECK_EXCEPTION();
 +      ZEND_VM_NEXT_OPCODE();
 +}
 +
  static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -6944,38 -6130,8 +6911,27 @@@ static int ZEND_FASTCALL  ZEND_BOOL_XOR
        SAVE_OPLINE();
        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                opline->op1.zv,
 -              _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
 +              _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 +
 +
 +      CHECK_EXCEPTION();
 +      ZEND_VM_NEXT_OPCODE();
 +}
 +
 +static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +{
 +      USE_OPLINE
 +
-       zval **container;
++      zval *container;
 +
 +      SAVE_OPLINE();
 +
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_CONST != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
++      if (IS_CONST == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
++              PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
 +      }
++      container = opline->op1.zv;
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
  
-       if (IS_CONST == IS_TMP_VAR || IS_CONST == IS_CONST) {
-               zval *container = opline->op1.zv;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
-       } else {
-               container = NULL;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
-       }
  
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@@ -8860,36 -7866,6 +8816,25 @@@ static int ZEND_FASTCALL  ZEND_FETCH_IS
        return zend_fetch_var_address_helper_SPEC_TMP_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  }
  
-       zval **container;
 +static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +{
 +      USE_OPLINE
 +      zend_free_op free_op1;
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_TMP_VAR != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_TMP_VAR == IS_TMP_VAR || IS_TMP_VAR == IS_CONST) {
-               zval *container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
-               zval_dtor(free_op1.var);
-       } else {
-               container = NULL;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
++      zval *container;
 +
 +      SAVE_OPLINE();
 +
++      if (IS_TMP_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
++              PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
 +      }
++      container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
 +
++      zval_dtor(free_op1.var);
 +      CHECK_EXCEPTION();
 +      ZEND_VM_NEXT_OPCODE();
 +}
 +
  static int ZEND_FASTCALL  ZEND_FETCH_DIM_TMP_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -9748,36 -8562,6 +9693,25 @@@ static int ZEND_FASTCALL  ZEND_BOOL_XOR
        ZEND_VM_NEXT_OPCODE();
  }
  
-       zval **container;
 +static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +{
 +      USE_OPLINE
 +      zend_free_op free_op1, free_op2;
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_TMP_VAR != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_TMP_VAR == IS_TMP_VAR || IS_TMP_VAR == IS_CONST) {
-               zval *container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
-               zval_dtor(free_op2.var);
-               zval_dtor(free_op1.var);
-       } else {
-               container = NULL;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
-               zval_dtor(free_op2.var);
++      zval *container;
 +
 +      SAVE_OPLINE();
 +
++      if (IS_TMP_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
++              PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
 +      }
++      container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
++      zval_dtor(free_op2.var);
++      zval_dtor(free_op1.var);
 +      CHECK_EXCEPTION();
 +      ZEND_VM_NEXT_OPCODE();
 +}
 +
  static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -10614,36 -9236,6 +10548,25 @@@ static int ZEND_FASTCALL  ZEND_FETCH_IS
        return zend_fetch_var_address_helper_SPEC_TMP_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
  }
  
-       zval **container;
 +static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +{
 +      USE_OPLINE
 +      zend_free_op free_op1, free_op2;
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_TMP_VAR != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_TMP_VAR == IS_TMP_VAR || IS_TMP_VAR == IS_CONST) {
-               zval *container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
-               zval_dtor(free_op1.var);
-       } else {
-               container = NULL;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
++      zval *container;
 +
 +      SAVE_OPLINE();
 +
++      if (IS_TMP_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
++              PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
 +      }
++      container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
++      if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
++      zval_dtor(free_op1.var);
 +      CHECK_EXCEPTION();
 +      ZEND_VM_NEXT_OPCODE();
 +}
 +
  static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -12060,36 -10336,6 +11983,25 @@@ static int ZEND_FASTCALL  ZEND_BOOL_XOR
        ZEND_VM_NEXT_OPCODE();
  }
  
-       zval **container;
 +static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +{
 +      USE_OPLINE
 +      zend_free_op free_op1;
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_TMP_VAR != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_TMP_VAR == IS_TMP_VAR || IS_TMP_VAR == IS_CONST) {
-               zval *container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
-               zval_dtor(free_op1.var);
-       } else {
-               container = NULL;
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
++      zval *container;
 +
 +      SAVE_OPLINE();
 +
++      if (IS_TMP_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
++              PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
 +      }
++      container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
 +
++      zval_dtor(free_op1.var);
 +      CHECK_EXCEPTION();
 +      ZEND_VM_NEXT_OPCODE();
 +}
 +
  static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -14775,24 -12878,13 +14687,13 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_VAR != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_VAR == IS_TMP_VAR || IS_VAR == IS_CONST) {
-               zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
-       } else {
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
+               PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
        }
 -      container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
++      container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+       zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
  
+       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -14857,10 -12949,10 +14758,10 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  {
        USE_OPLINE
        zend_free_op free_op1;
-       zval **container;
+       zval *container;
  
        SAVE_OPLINE();
-       container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 -      container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
++      container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_IS TSRMLS_CC);
  
        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
@@@ -14875,9 -12967,9 +14776,9 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
 -      if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
 -              zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 +      if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++              zval **container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                }
                if (IS_CONST == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                }
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 -              container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
++              container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
-       }
  
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -17124,24 -15054,13 +17029,13 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_VAR != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_VAR == IS_TMP_VAR || IS_VAR == IS_CONST) {
-               zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
-               zval_dtor(free_op2.var);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
-       } else {
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
-               zval_dtor(free_op2.var);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
+               PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
        }
 -      container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
++      container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
+       zval_dtor(free_op2.var);
+       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -17206,11 -15125,11 +17100,11 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval **container;
+       zval *container;
  
        SAVE_OPLINE();
-       container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 -      container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_IS TSRMLS_CC);
++      container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 +      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_IS TSRMLS_CC);
        zval_dtor(free_op2.var);
        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        CHECK_EXCEPTION();
@@@ -17224,9 -15143,9 +17118,9 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
 -      if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
 -              zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 +      if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++              zval **container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                }
                if (IS_TMP_VAR == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                }
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 -              container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 -              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
++              container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 +              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
+               zval_dtor(free_op2.var);
+               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        }
-       zval_dtor(free_op2.var);
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -19380,24 -17140,13 +19278,13 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_VAR != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_VAR == IS_TMP_VAR || IS_VAR == IS_CONST) {
-               zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
-       } else {
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
+               PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
        }
 -      container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
++      container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
+       if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
+       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -19462,11 -17211,11 +19349,11 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
-       zval **container;
+       zval *container;
  
        SAVE_OPLINE();
-       container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 -      container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_IS TSRMLS_CC);
++      container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 +      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_IS TSRMLS_CC);
        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        CHECK_EXCEPTION();
@@@ -19480,9 -17229,9 +19367,9 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
 -      if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
 -              zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 +      if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++              zval **container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                }
                if (IS_VAR == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                }
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 -              container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 -              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
++              container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 +              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
+               if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
+               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        }
-       if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -21427,9 -19016,9 +21318,9 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
 -      if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
 -              zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 +      if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++              zval **container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                }
                if (IS_UNUSED == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                }
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 -              container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
++              container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_R TSRMLS_CC);
-       }
  
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -22838,24 -20271,13 +22733,13 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_VAR != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_VAR == IS_TMP_VAR || IS_VAR == IS_CONST) {
-               zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
-       } else {
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
+               PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
        }
 -      container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
++      container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
  
+       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -22920,11 -20342,11 +22804,11 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  {
        USE_OPLINE
        zend_free_op free_op1;
-       zval **container;
+       zval *container;
  
        SAVE_OPLINE();
-       container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 -      container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_IS TSRMLS_CC);
++      container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 +      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_IS TSRMLS_CC);
  
        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        CHECK_EXCEPTION();
@@@ -22938,9 -20360,9 +22822,9 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
 -      if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
 -              zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 +      if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
++              zval **container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                }
                if (IS_CV == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                }
-               container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 -              container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
 -              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
++              container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 +              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
-       }
  
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -32217,24 -28708,13 +32105,13 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_CV != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
+       if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
+               PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
        }
-       if (IS_CV == IS_TMP_VAR || IS_CV == IS_CONST) {
-               zval *container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
-       } else {
-               container = _get_zval_ptr_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
 -      container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
++      container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+       zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
  
  
-       }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -32298,10 -28778,10 +32175,10 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  {
        USE_OPLINE
  
-       zval **container;
+       zval *container;
  
        SAVE_OPLINE();
-       container = _get_zval_ptr_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
 -      container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
++      container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_IS TSRMLS_CC);
  
  
@@@ -32316,9 -28796,9 +32193,9 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
 -      if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
 -              zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
 +      if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-               container = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
++              zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                }
                if (IS_CONST == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                }
-               container = _get_zval_ptr_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 -              container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
++              container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
-       }
  
  
+       }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -34331,23 -30659,12 +34212,12 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_CV != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_CV == IS_TMP_VAR || IS_CV == IS_CONST) {
-               zval *container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
-               zval_dtor(free_op2.var);
-       } else {
-               container = _get_zval_ptr_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
-               zval_dtor(free_op2.var);
+       if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
+               PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
        }
 -      container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
++      container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
+       zval_dtor(free_op2.var);
  
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@@ -34412,11 -30729,11 +34282,11 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  {
        USE_OPLINE
        zend_free_op free_op2;
-       zval **container;
+       zval *container;
  
        SAVE_OPLINE();
-       container = _get_zval_ptr_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
 -      container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_IS TSRMLS_CC);
++      container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
 +      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_IS TSRMLS_CC);
        zval_dtor(free_op2.var);
  
        CHECK_EXCEPTION();
@@@ -34430,9 -30747,9 +34300,9 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
 -      if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
 -              zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
 +      if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-               container = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
++              zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                }
                if (IS_TMP_VAR == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                }
-               container = _get_zval_ptr_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 -              container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
 -              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
++              container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 +              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
-       }
-       zval_dtor(free_op2.var);
+               zval_dtor(free_op2.var);
  
+       }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -36449,23 -32614,12 +36323,12 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_CV != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
-       }
-       if (IS_CV == IS_TMP_VAR || IS_CV == IS_CONST) {
-               zval *container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
-       } else {
-               container = _get_zval_ptr_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
+       if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
+               PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
        }
 -      container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
++      container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
+       if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
  
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@@ -36530,11 -32684,11 +36393,11 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  {
        USE_OPLINE
        zend_free_op free_op2;
-       zval **container;
+       zval *container;
  
        SAVE_OPLINE();
-       container = _get_zval_ptr_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
 -      container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_IS TSRMLS_CC);
++      container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
 +      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_IS TSRMLS_CC);
        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
  
        CHECK_EXCEPTION();
@@@ -36548,9 -32702,9 +36411,9 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
 -      if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
 -              zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
 +      if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-               container = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
++              zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                }
                if (IS_VAR == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                }
-               container = _get_zval_ptr_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 -              container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
 -              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
++              container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 +              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-       }
-       if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
+               if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
  
+       }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -38356,9 -34357,9 +38223,9 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
 -      if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
 -              zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
 +      if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-               container = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
++              zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                }
                if (IS_UNUSED == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                }
-               container = _get_zval_ptr_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 -              container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
++              container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_R TSRMLS_CC);
-       }
  
  
+       }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -39620,24 -35472,13 +39491,13 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
-       if ((opline->extended_value & ZEND_FETCH_ADD_LOCK) &&
-           IS_CV != IS_CV &&
-           EX_T(opline->op1.var).var.ptr_ptr) {
-               PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
+       if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
+               PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
        }
-       if (IS_CV == IS_TMP_VAR || IS_CV == IS_CONST) {
-               zval *container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
-       } else {
-               container = _get_zval_ptr_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
-               zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
 -      container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
++      container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
++      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
  
  
-       }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }
@@@ -39701,11 -35542,11 +39561,11 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  {
        USE_OPLINE
  
-       zval **container;
+       zval *container;
  
        SAVE_OPLINE();
-       container = _get_zval_ptr_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
 -      container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
 -      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_IS TSRMLS_CC);
++      container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
 +      zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_IS TSRMLS_CC);
  
  
        CHECK_EXCEPTION();
@@@ -39719,9 -35560,9 +39579,9 @@@ static int ZEND_FASTCALL  ZEND_FETCH_DI
  
        SAVE_OPLINE();
  
 -      if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
 -              zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
 +      if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-               container = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
++              zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                }
                if (IS_CV == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                }
-               container = _get_zval_ptr_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 -              container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
 -              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
++              container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 +              zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
-       }
  
  
+       }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
  }