diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2019-07-04 17:13:04 +0200 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-07-04 17:13:04 +0200 |
| commit | 9fbf9e3e1353b0082bdbdb136a95dcb2d4a5b0da (patch) | |
| tree | 2469b11a8ae2ebafde9ec51783c859d9fa8d1ecd /ext | |
| parent | 806e38a3a4a9409f89a44831b2869b831ff886be (diff) | |
| parent | a0e762405955b9e3b63ca8f164006afc6bb6b435 (diff) | |
| download | php-git-9fbf9e3e1353b0082bdbdb136a95dcb2d4a5b0da.tar.gz | |
Merge branch 'PHP-7.4'
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/opcache/Optimizer/compact_literals.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/ext/opcache/Optimizer/compact_literals.c b/ext/opcache/Optimizer/compact_literals.c index ec01302aac..50ccd7d256 100644 --- a/ext/opcache/Optimizer/compact_literals.c +++ b/ext/opcache/Optimizer/compact_literals.c @@ -431,16 +431,18 @@ literals_handle_static_prop: j++; } break; - case IS_STRING: + case IS_STRING: { if (LITERAL_NUM_RELATED(info[i].flags) == 1) { key = zend_string_copy(Z_STR(op_array->literals[i])); - } else { + } else if ((info[i].flags & LITERAL_KIND_MASK) != LITERAL_VALUE) { key = zend_string_init(Z_STRVAL(op_array->literals[i]), Z_STRLEN(op_array->literals[i]), 0); ZSTR_H(key) = ZSTR_HASH(Z_STR(op_array->literals[i])) + LITERAL_NUM_RELATED(info[i].flags) - 1; + } else { + /* Don't merge LITERAL_VALUE that has related literals */ + key = NULL; } - pos = zend_hash_find(&hash, key); - if (pos != NULL && + if (key && (pos = zend_hash_find(&hash, key)) != NULL && Z_TYPE(op_array->literals[Z_LVAL_P(pos)]) == IS_STRING && LITERAL_NUM_RELATED(info[i].flags) == LITERAL_NUM_RELATED(info[Z_LVAL_P(pos)].flags) && (LITERAL_NUM_RELATED(info[i].flags) != 2 || @@ -458,8 +460,10 @@ literals_handle_static_prop: } else { map[i] = j; ZVAL_LONG(&zv, j); - zend_hash_add_new(&hash, key, &zv); - zend_string_release_ex(key, 0); + if (key) { + zend_hash_add_new(&hash, key, &zv); + zend_string_release_ex(key, 0); + } if (i != j) { op_array->literals[j] = op_array->literals[i]; info[j] = info[i]; @@ -474,6 +478,7 @@ literals_handle_static_prop: } } break; + } case IS_ARRAY: if (zend_hash_num_elements(Z_ARRVAL(op_array->literals[i])) == 0) { if (l_empty_arr < 0) { |
