summaryrefslogtreecommitdiff
path: root/Zend/zend_compile.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_compile.c')
-rw-r--r--Zend/zend_compile.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index a42e63ec99..be70ff6643 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -5625,17 +5625,12 @@ static inline zend_bool zend_try_ct_eval_binary_op(zval *result, uint32_t opcode
binary_op_type fn = get_binary_op(opcode);
/* don't evaluate division by zero at compile-time */
- if (opcode == ZEND_DIV) {
- convert_scalar_to_number(op2);
- if (Z_TYPE_P(op2) == IS_LONG) {
- if (Z_LVAL_P(op2) == 0) {
- return 0;
- }
- } else if (Z_TYPE_P(op2) == IS_DOUBLE) {
- if (Z_DVAL_P(op2) == 0.0) {
- return 0;
- }
- }
+ if ((opcode == ZEND_DIV || opcode == ZEND_MOD) &&
+ zval_get_long(op2) == 0) {
+ return 0;
+ } else if ((opcode == ZEND_SL || opcode == ZEND_SR) &&
+ zval_get_long(op2) < 0) {
+ return 0;
}
fn(result, op1, op2);