]> granicus.if.org Git - php/commitdiff
Special handling for $php_errormsg and $http_response_header.
authorDmitry Stogov <dmitry@zend.com>
Thu, 15 Sep 2016 00:07:31 +0000 (03:07 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 29 Sep 2016 23:41:08 +0000 (02:41 +0300)
ext/opcache/Optimizer/zend_inference.c

index 5abab01ac41ee4d4dde358c0c598d727469b1570..f9fd26748d28a88dd69b6161c0a8fa75577e9439 100644 (file)
@@ -4063,13 +4063,19 @@ static int zend_infer_types(const zend_op_array *op_array, const zend_script *sc
        zend_type_narrowing(op_array, script, ssa);
 
        for (j = 0; j < op_array->last_var; j++) {
+               /* $php_errormsg and $http_response_header may be updated indirectly */
                if (zend_string_equals_literal(op_array->vars[j], "php_errormsg")) {
-                       /* Mark all SSA vars for $php_errormsg as references,
-                        * to make sure we don't optimize it. */
                        int i;
                        for (i = 0; i < ssa_vars_count; i++) {
                                if (ssa->vars[i].var == j) {
-                                       ssa_var_info[i].type |= MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
+                                       ssa_var_info[i].type |= MAY_BE_STRING | MAY_BE_RC1 | MAY_BE_RCN;
+                               }
+                       }
+               } else if (zend_string_equals_literal(op_array->vars[j], "http_response_header")) {
+                       int i;
+                       for (i = 0; i < ssa_vars_count; i++) {
+                               if (ssa->vars[i].var == j) {
+                                       ssa_var_info[i].type |= MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_RC1 | MAY_BE_RCN;
                                }
                        }
                }