# HG changeset patch # User Stefan Anzinger # Date 1430152630 -7200 # Node ID 6e05dd55d795f9bb91799bde33f99090c4e92181 # Parent 41f048caa3ddf13ba70bc14cb0c0b364fe72aa21# Parent b625b459cf459e3d788b587b2dc316602d997ef5 Merge diff -r 41f048caa3dd -r 6e05dd55d795 graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLDivNode.java --- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLDivNode.java Mon Apr 27 18:36:16 2015 +0200 +++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLDivNode.java Mon Apr 27 18:37:10 2015 +0200 @@ -41,10 +41,16 @@ super(src); } - @Specialization - protected long div(long left, long right) { - /* No overflow is possible on a division. */ - return left / right; + @Specialization(rewriteOn = ArithmeticException.class) + protected long div(long left, long right) throws ArithmeticException { + long result = left / right; + /* + * The division overflows if left is Long.MIN_VALUE and right is -1. + */ + if ((left & right & result) < 0) { + throw new ArithmeticException("long overflow"); + } + return result; } @Specialization