mirror of
https://github.com/php/php-src.git
synced 2024-09-23 02:47:26 +00:00
Don't remove CONST CAST in CONCAT operand
CONCAT assumes that CONST operands are strings, so we cannot blindly remove CAST operands.
This commit is contained in:
parent
1b998bb9cb
commit
105a04aaac
@ -719,7 +719,8 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
|
|||||||
src = VAR_SOURCE(opline->op1);
|
src = VAR_SOURCE(opline->op1);
|
||||||
if (src &&
|
if (src &&
|
||||||
src->opcode == ZEND_CAST &&
|
src->opcode == ZEND_CAST &&
|
||||||
src->extended_value == IS_STRING) {
|
src->extended_value == IS_STRING &&
|
||||||
|
src->op1_type != IS_CONST) {
|
||||||
/* convert T1 = CAST(STRING, X), T2 = CONCAT(T1, Y) to T2 = CONCAT(X,Y) */
|
/* convert T1 = CAST(STRING, X), T2 = CONCAT(T1, Y) to T2 = CONCAT(X,Y) */
|
||||||
VAR_SOURCE(opline->op1) = NULL;
|
VAR_SOURCE(opline->op1) = NULL;
|
||||||
COPY_NODE(opline->op1, src->op1);
|
COPY_NODE(opline->op1, src->op1);
|
||||||
@ -731,7 +732,8 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
|
|||||||
src = VAR_SOURCE(opline->op2);
|
src = VAR_SOURCE(opline->op2);
|
||||||
if (src &&
|
if (src &&
|
||||||
src->opcode == ZEND_CAST &&
|
src->opcode == ZEND_CAST &&
|
||||||
src->extended_value == IS_STRING) {
|
src->extended_value == IS_STRING &&
|
||||||
|
src->op1_type != IS_CONST) {
|
||||||
/* convert T1 = CAST(STRING, X), T2 = CONCAT(Y, T1) to T2 = CONCAT(Y,X) */
|
/* convert T1 = CAST(STRING, X), T2 = CONCAT(Y, T1) to T2 = CONCAT(Y,X) */
|
||||||
zend_op *src = VAR_SOURCE(opline->op2);
|
zend_op *src = VAR_SOURCE(opline->op2);
|
||||||
VAR_SOURCE(opline->op2) = NULL;
|
VAR_SOURCE(opline->op2) = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user