]> granicus.if.org Git - php/commitdiff
Add DCE support for ARRAY_KEY_EXISTS
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 5 Dec 2019 13:51:36 +0000 (14:51 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 5 Dec 2019 13:55:22 +0000 (14:55 +0100)
ext/opcache/Optimizer/dce.c
ext/opcache/Optimizer/zend_inference.c

index 2992bb60b37ec10c6197556c2d8a6d0ddf92d648..ea81687bf43a18ab642bfa092759c8921aeb2415 100644 (file)
@@ -124,6 +124,7 @@ static inline zend_bool may_have_side_effects(
                case ZEND_IN_ARRAY:
                case ZEND_FUNC_NUM_ARGS:
                case ZEND_FUNC_GET_ARGS:
+               case ZEND_ARRAY_KEY_EXISTS:
                        /* No side effects */
                        return 0;
                case ZEND_ROPE_END:
index 975853a9eb559b0d0034ac3b936fd83603f8e0a8..1838fe387baedb0733508c0c7518ffba67a698eb 100644 (file)
@@ -4634,6 +4634,14 @@ int zend_may_throw(const zend_op *opline, const zend_op_array *op_array, zend_ss
                                default:
                                        return 1;
                        }
+               case ZEND_ARRAY_KEY_EXISTS:
+                       if ((t2 & MAY_BE_ANY) != MAY_BE_ARRAY) {
+                               return 1;
+                       }
+                       if ((t1 & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
+                               return 1;
+                       }
+                       return 0;
                default:
                        return 1;
        }