From: Dmitry Stogov Date: Thu, 15 Sep 2016 00:07:31 +0000 (+0300) Subject: Special handling for $php_errormsg and $http_response_header. X-Git-Tag: php-7.1.0RC4~110 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c218c4f01eccc39bea20d5e18eac04dd6bb562f3;p=php Special handling for $php_errormsg and $http_response_header. --- diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 5abab01ac4..f9fd26748d 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -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; } } }