[pypy-commit] pypy default: test and fix
arigo
noreply at buildbot.pypy.org
Mon Oct 31 09:22:55 CET 2011
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r48618:315c9147dfac
Date: 2011-10-31 09:22 +0100
http://bitbucket.org/pypy/pypy/changeset/315c9147dfac/
Log: test and fix
diff --git a/pypy/jit/metainterp/optimizeopt/intbounds.py b/pypy/jit/metainterp/optimizeopt/intbounds.py
--- a/pypy/jit/metainterp/optimizeopt/intbounds.py
+++ b/pypy/jit/metainterp/optimizeopt/intbounds.py
@@ -1,3 +1,4 @@
+import sys
from pypy.jit.metainterp.optimizeopt.optimizer import Optimization, CONST_1, CONST_0, \
MODE_ARRAY, MODE_STR, MODE_UNICODE
from pypy.jit.metainterp.history import ConstInt
@@ -142,7 +143,9 @@
if v2.is_constant():
val = v2.box.getint()
r = self.getvalue(op.result)
- if val < 0: # what if val == -sys.maxint-1?
+ if val < 0:
+ if val == -sys.maxint-1:
+ return # give up
val = -val
if known_nonneg:
r.intbound.make_ge(IntBound(0, 0))
diff --git a/pypy/jit/metainterp/optimizeopt/intutils.py b/pypy/jit/metainterp/optimizeopt/intutils.py
--- a/pypy/jit/metainterp/optimizeopt/intutils.py
+++ b/pypy/jit/metainterp/optimizeopt/intutils.py
@@ -1,4 +1,5 @@
from pypy.rlib.rarithmetic import ovfcheck, ovfcheck_lshift, LONG_BIT
+from pypy.rlib.objectmodel import we_are_translated
from pypy.jit.metainterp.resoperation import rop, ResOperation
from pypy.jit.metainterp.history import BoxInt, ConstInt
import sys
@@ -13,6 +14,10 @@
self.has_lower = True
self.upper = upper
self.lower = lower
+ # check for unexpected overflows:
+ if not we_are_translated():
+ assert type(upper) is not long
+ assert type(lower) is not long
# Returns True if the bound was updated
def make_le(self, other):
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -4770,6 +4770,16 @@
py.test.skip("harder")
self.optimize_loop(ops, expected)
+ def test_intmod_bounds_bug1(self):
+ ops = """
+ [i0]
+ i1 = int_mod(i0, %d)
+ i2 = int_eq(i1, 0)
+ guard_false(i2) []
+ finish()
+ """ % (-(1<<(LONG_BIT-1)),)
+ self.optimize_loop(ops, ops)
+
def test_bounded_lazy_setfield(self):
ops = """
[p0, i0]
More information about the pypy-commit
mailing list