Merge pull request #1562 from ichyo/wrong-zero-div-optimization

Fix wrong const optimization for "1.0 / 0.0" case
This commit is contained in:
Noah
2019-10-23 12:24:54 -05:00
committed by GitHub
2 changed files with 5 additions and 1 deletions

View File

@@ -52,7 +52,7 @@ pub fn operator(buf: &mut impl OptimizationBuffer) {
(op!(Multiply), lc!(Float, lhs), lc!(Float, rhs)) => {
emitconst!(buf, [lhs_meta, rhs_meta], Float, lhs * rhs)
}
(op!(Divide), lc!(Float, lhs), lc!(Float, rhs)) => {
(op!(Divide), lc!(Float, lhs), lc!(Float, rhs)) if rhs != 0.0 => {
emitconst!(buf, [lhs_meta, rhs_meta], Float, lhs / rhs)
}
(op!(Power), lc!(Float, lhs), lc!(Float, rhs)) => {

View File

@@ -144,6 +144,10 @@ assert_raises(ZeroDivisionError, lambda: 2 / 0.0)
assert_raises(ZeroDivisionError, lambda: 2 // 0.0)
assert_raises(ZeroDivisionError, lambda: 2 % 0.0)
# assert_raises(ZeroDivisionError, divmod, 2, 0.0)
assert_raises(ZeroDivisionError, lambda: 2.0 / 0.0)
assert_raises(ZeroDivisionError, lambda: 2.0 // 0.0)
assert_raises(ZeroDivisionError, lambda: 2.0 % 0.0)
assert_raises(ZeroDivisionError, divmod, 2.0, 0.0)
assert 1.2.__int__() == 1
assert 1.2.__float__() == 1.2