Author: Manuel Jacob Branch: Changeset: r68865:ae05315ebb9c Date: 2014-01-23 18:30 +0100 http://bitbucket.org/pypy/pypy/changeset/ae05315ebb9c/
Log: Add failing test that checks whether raisingop2direct_call transforms overflow operations using unsigned arithmetic. diff --git a/rpython/translator/c/test/test_backendoptimized.py b/rpython/translator/c/test/test_backendoptimized.py --- a/rpython/translator/c/test/test_backendoptimized.py +++ b/rpython/translator/c/test/test_backendoptimized.py @@ -216,3 +216,22 @@ fn = self.getcompiled(f, [int]) for x in (0,1,2,3,9,27,48, -9): assert fn(x) == f(x) + + def test_ovf_op_in_loop(self): + # This checks whether the raising operations are implemented using + # unsigned arithmetic. The problem with using signed arithmetic is that + # signed overflow is undefined in C and the optimizer is allowed to + # remove the overflow check. + from sys import maxint + from rpython.rlib.rarithmetic import ovfcheck + def f(x, y): + ret = 0 + for i in range(y): + try: + ret = ovfcheck(x + i) + except OverflowError: + break + return ret + fc = self.getcompiled(f, [int, int]) + assert fc(10, 10) == 19 + assert fc(maxint, 10) == maxint _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit