]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.0'
authorXinchen Hui <laruence@gmail.com>
Thu, 17 Mar 2016 07:26:40 +0000 (15:26 +0800)
committerXinchen Hui <laruence@gmail.com>
Thu, 17 Mar 2016 07:26:40 +0000 (15:26 +0800)
* PHP-7.0:
  Fixed test script
  Update NEWS
  Fixed bug #71841 (EG(error_zval) is not handled well)
  Fixed bug #71840 (Unserialize accepts wrongly data)

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

1  2 
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index c5826c140c1b57dc9f5538e73d3ff66b84fe764f,2c721c398a16f5cb220b57b1c32a3a87c317ec92..5a68397ce55c4bbdba19f6b922c02f383028f910
@@@ -737,10 -744,10 +737,10 @@@ ZEND_VM_HELPER(zend_binary_assign_op_ob
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       zval zv;
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
 +                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                               ZVAL_NULL(&zv);
-                               zptr = &zv;
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
+                               }
                        } else {
                                ZVAL_DEREF(zptr);
                                SEPARATE_ZVAL_NOREF(zptr);
@@@ -1124,21 -1155,19 +1122,19 @@@ ZEND_VM_HELPER(zend_pre_incdec_property
                }
  
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                        } else {
-                               zval zv;
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       ZVAL_NULL(&zv);
-                                       zptr = &zv;
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        SEPARATE_ZVAL_NOREF(zptr);
@@@ -1206,18 -1241,16 +1202,16 @@@ ZEND_VM_HELPER(zend_post_incdec_propert
  
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
-                               }
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               ZVAL_NULL(EX_VAR(opline->result.var));
                        } else {
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       zptr = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(zptr);
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
index 0a62b43f7a6c038b316370cba8755419b39014d7,c719aa280854a8c2b214d7b18c52ed8f7b5d3fd2..fa306954b0da8fb8c66a79eec2062436a38e0a55
@@@ -16877,10 -16524,10 +16877,10 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       zval zv;
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
 +                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                               ZVAL_NULL(&zv);
-                               zptr = &zv;
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
+                               }
                        } else {
                                ZVAL_DEREF(zptr);
                                SEPARATE_ZVAL_NOREF(zptr);
@@@ -17262,21 -16933,19 +17260,19 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                }
  
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                        } else {
-                               zval zv;
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       ZVAL_NULL(&zv);
-                                       zptr = &zv;
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        SEPARATE_ZVAL_NOREF(zptr);
@@@ -17343,18 -17018,16 +17339,16 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
-                               }
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               ZVAL_NULL(EX_VAR(opline->result.var));
                        } else {
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       zptr = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(zptr);
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
@@@ -21244,10 -19740,10 +21238,10 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       zval zv;
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
 +                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                               ZVAL_NULL(&zv);
-                               zptr = &zv;
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
+                               }
                        } else {
                                ZVAL_DEREF(zptr);
                                SEPARATE_ZVAL_NOREF(zptr);
@@@ -21629,21 -20149,19 +21621,19 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                }
  
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                        } else {
-                               zval zv;
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       ZVAL_NULL(&zv);
-                                       zptr = &zv;
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        SEPARATE_ZVAL_NOREF(zptr);
@@@ -21710,18 -20234,16 +21700,16 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
-                               }
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               ZVAL_NULL(EX_VAR(opline->result.var));
                        } else {
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       zptr = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(zptr);
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
@@@ -23802,10 -21411,10 +23790,10 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       zval zv;
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
 +                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                               ZVAL_NULL(&zv);
-                               zptr = &zv;
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
+                               }
                        } else {
                                ZVAL_DEREF(zptr);
                                SEPARATE_ZVAL_NOREF(zptr);
@@@ -24189,21 -21822,19 +24175,19 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                }
  
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                        } else {
-                               zval zv;
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       ZVAL_NULL(&zv);
-                                       zptr = &zv;
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        SEPARATE_ZVAL_NOREF(zptr);
@@@ -24271,18 -21908,16 +24255,16 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
-                               }
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               ZVAL_NULL(EX_VAR(opline->result.var));
                        } else {
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       zptr = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(zptr);
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
@@@ -26275,10 -22970,10 +26257,10 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       zval zv;
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
 +                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                               ZVAL_NULL(&zv);
-                               zptr = &zv;
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
+                               }
                        } else {
                                ZVAL_DEREF(zptr);
                                SEPARATE_ZVAL_NOREF(zptr);
@@@ -26630,21 -23343,19 +26610,19 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                }
  
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                        } else {
-                               zval zv;
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       ZVAL_NULL(&zv);
-                                       zptr = &zv;
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        SEPARATE_ZVAL_NOREF(zptr);
@@@ -26711,18 -23428,16 +26689,16 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
-                               }
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               ZVAL_NULL(EX_VAR(opline->result.var));
                        } else {
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       zptr = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(zptr);
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
@@@ -29593,10 -25397,10 +29569,10 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       zval zv;
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
 +                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                               ZVAL_NULL(&zv);
-                               zptr = &zv;
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
+                               }
                        } else {
                                ZVAL_DEREF(zptr);
                                SEPARATE_ZVAL_NOREF(zptr);
@@@ -29948,21 -25770,19 +29922,19 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                }
  
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                        } else {
-                               zval zv;
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       ZVAL_NULL(&zv);
-                                       zptr = &zv;
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        SEPARATE_ZVAL_NOREF(zptr);
@@@ -30029,18 -25855,16 +30001,16 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
-                               }
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               ZVAL_NULL(EX_VAR(opline->result.var));
                        } else {
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       zptr = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(zptr);
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
@@@ -31850,10 -26896,10 +31820,10 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       zval zv;
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
 +                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                               ZVAL_NULL(&zv);
-                               zptr = &zv;
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
+                               }
                        } else {
                                ZVAL_DEREF(zptr);
                                SEPARATE_ZVAL_NOREF(zptr);
@@@ -32206,21 -27270,19 +32174,19 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                }
  
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                        } else {
-                               zval zv;
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       ZVAL_NULL(&zv);
-                                       zptr = &zv;
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        SEPARATE_ZVAL_NOREF(zptr);
@@@ -32288,18 -27356,16 +32254,16 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
-                               }
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               ZVAL_NULL(EX_VAR(opline->result.var));
                        } else {
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       zptr = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(zptr);
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
@@@ -36404,10 -30601,10 +36368,10 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       zval zv;
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
 +                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                               ZVAL_NULL(&zv);
-                               zptr = &zv;
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
+                               }
                        } else {
                                ZVAL_DEREF(zptr);
                                SEPARATE_ZVAL_NOREF(zptr);
@@@ -36789,21 -31010,19 +36751,19 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                }
  
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                        } else {
-                               zval zv;
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       ZVAL_NULL(&zv);
-                                       zptr = &zv;
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        SEPARATE_ZVAL_NOREF(zptr);
@@@ -36870,18 -31095,16 +36830,16 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
-                               }
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               ZVAL_NULL(EX_VAR(opline->result.var));
                        } else {
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       zptr = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(zptr);
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
@@@ -42932,10 -35868,10 +42890,10 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       zval zv;
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
 +                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                               ZVAL_NULL(&zv);
-                               zptr = &zv;
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
+                               }
                        } else {
                                ZVAL_DEREF(zptr);
                                SEPARATE_ZVAL_NOREF(zptr);
@@@ -43317,21 -36277,19 +43273,19 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                }
  
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                        } else {
-                               zval zv;
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       ZVAL_NULL(&zv);
-                                       zptr = &zv;
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        SEPARATE_ZVAL_NOREF(zptr);
@@@ -43398,18 -36362,16 +43352,16 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
-                               }
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               ZVAL_NULL(EX_VAR(opline->result.var));
                        } else {
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       zptr = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(zptr);
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
@@@ -46487,10 -38540,10 +46439,10 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       zval zv;
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
 +                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                               ZVAL_NULL(&zv);
-                               zptr = &zv;
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
+                               }
                        } else {
                                ZVAL_DEREF(zptr);
                                SEPARATE_ZVAL_NOREF(zptr);
@@@ -46874,21 -38951,19 +46824,19 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
                }
  
                /* here we are sure we are dealing with an object */
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+                                       ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                        } else {
-                               zval zv;
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       ZVAL_NULL(&zv);
-                                       zptr = &zv;
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        SEPARATE_ZVAL_NOREF(zptr);
@@@ -46956,18 -39037,16 +46904,16 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  
                if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
                        && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
-                       if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
-                               ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
-                               if (inc) {
-                                       fast_long_increment_function(zptr);
-                               } else {
-                                       fast_long_decrement_function(zptr);
-                               }
 -                      if (UNEXPECTED(zptr == &EG(error_zval))) {
++                      if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+                               ZVAL_NULL(EX_VAR(opline->result.var));
                        } else {
-                               if (UNEXPECTED(Z_ISERROR_P(zptr))) {
-                                       zptr = EX_VAR(opline->result.var);
-                                       ZVAL_NULL(zptr);
+                               if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
+                                       ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
+                                       if (inc) {
+                                               fast_long_increment_function(zptr);
+                                       } else {
+                                               fast_long_decrement_function(zptr);
+                                       }
                                } else {
                                        ZVAL_DEREF(zptr);
                                        ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);