Skip to content

Commit 105a04a

Browse files
committed
Don't remove CONST CAST in CONCAT operand
CONCAT assumes that CONST operands are strings, so we cannot blindly remove CAST operands.
1 parent 1b998bb commit 105a04a

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

ext/opcache/Optimizer/block_pass.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -719,7 +719,8 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
719719
src = VAR_SOURCE(opline->op1);
720720
if (src &&
721721
src->opcode == ZEND_CAST &&
722-
src->extended_value == IS_STRING) {
722+
src->extended_value == IS_STRING &&
723+
src->op1_type != IS_CONST) {
723724
/* convert T1 = CAST(STRING, X), T2 = CONCAT(T1, Y) to T2 = CONCAT(X,Y) */
724725
VAR_SOURCE(opline->op1) = NULL;
725726
COPY_NODE(opline->op1, src->op1);
@@ -731,7 +732,8 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
731732
src = VAR_SOURCE(opline->op2);
732733
if (src &&
733734
src->opcode == ZEND_CAST &&
734-
src->extended_value == IS_STRING) {
735+
src->extended_value == IS_STRING &&
736+
src->op1_type != IS_CONST) {
735737
/* convert T1 = CAST(STRING, X), T2 = CONCAT(Y, T1) to T2 = CONCAT(Y,X) */
736738
zend_op *src = VAR_SOURCE(opline->op2);
737739
VAR_SOURCE(opline->op2) = NULL;

0 commit comments

Comments
 (0)