Skip to content

Commit 125ac7b

Browse files
nikicGirgias
authored andcommitted
Fix zend_is_long_compatible arg order
And put op2 in a variable while at it.
1 parent 886765c commit 125ac7b

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

Zend/Optimizer/pass1.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,24 +119,25 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
119119
} else if (opline->extended_value == ZEND_MOD
120120
|| opline->extended_value == ZEND_SL
121121
|| opline->extended_value == ZEND_SR) {
122-
if (Z_TYPE(ZEND_OP2_LITERAL(opline)) != IS_LONG) {
122+
zval *op2 = &ZEND_OP2_LITERAL(opline);
123+
if (Z_TYPE_P(op2) != IS_LONG) {
123124
/* Don't optimize if it should produce an incompatible float to int error */
124125
// TODO There must be a better way
125-
if (Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_DOUBLE
126-
&& !zend_is_long_compatible(zend_dval_to_lval(Z_DVAL(ZEND_OP2_LITERAL(opline))),
127-
Z_DVAL(ZEND_OP2_LITERAL(opline)))) {
126+
if (Z_TYPE_P(op2) == IS_DOUBLE
127+
&& !zend_is_long_compatible(
128+
Z_DVAL_P(op2), zend_dval_to_lval(Z_DVAL_P(op2)))) {
128129
break;
129130
}
130131
/* don't optimize if it should produce a runtime numeric string error */
131-
if (Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_STRING) {
132+
if (Z_TYPE_P(op2) == IS_STRING) {
132133
double dval = 0;
133-
zend_uchar is_num = is_numeric_string(Z_STRVAL(ZEND_OP2_LITERAL(opline)),
134-
Z_STRLEN(ZEND_OP2_LITERAL(opline)), NULL, &dval, /* allow_errors */ false);
135-
if (is_num == 0 || (is_num == IS_DOUBLE && !zend_is_long_compatible(zend_dval_to_lval(dval), dval))) {
134+
zend_uchar is_num = is_numeric_string(Z_STRVAL_P(op2),
135+
Z_STRLEN_P(op2), NULL, &dval, /* allow_errors */ false);
136+
if (is_num == 0 || (is_num == IS_DOUBLE && !zend_is_long_compatible(dval, zend_dval_to_lval(dval)))) {
136137
break;
137138
}
138139
}
139-
convert_to_long(&ZEND_OP2_LITERAL(opline));
140+
convert_to_long(op2);
140141
}
141142
} else if (opline->extended_value == ZEND_CONCAT) {
142143
if (Z_TYPE(ZEND_OP2_LITERAL(opline)) != IS_STRING) {

0 commit comments

Comments
 (0)