Author: Armin Rigo <[email protected]>
Branch:
Changeset: r83516:7c00ff49e3ee
Date: 2016-04-05 12:01 +0300
http://bitbucket.org/pypy/pypy/changeset/7c00ff49e3ee/
Log: (fijal, arigo)
test and fix: unpack() on a Trace which contains half-written
operations (here because it got a FrontendTagOverflow)
diff --git a/rpython/jit/metainterp/opencoder.py
b/rpython/jit/metainterp/opencoder.py
--- a/rpython/jit/metainterp/opencoder.py
+++ b/rpython/jit/metainterp/opencoder.py
@@ -141,6 +141,8 @@
return self.pos >= self.end
def _next(self):
+ if self.done():
+ raise IndexError
res = rffi.cast(lltype.Signed, self.trace._ops[self.pos])
self.pos += 1
return res
@@ -483,8 +485,11 @@
def unpack(self):
iter = self.get_iter()
ops = []
- while not iter.done():
- ops.append(iter.next())
+ try:
+ while True:
+ ops.append(iter.next())
+ except IndexError:
+ pass
return iter.inputargs, ops
def tag(kind, pos):
diff --git a/rpython/jit/metainterp/test/test_opencoder.py
b/rpython/jit/metainterp/test/test_opencoder.py
--- a/rpython/jit/metainterp/test/test_opencoder.py
+++ b/rpython/jit/metainterp/test/test_opencoder.py
@@ -1,5 +1,6 @@
-
+import py
from rpython.jit.metainterp.opencoder import Trace, untag, TAGINT, TAGBOX
+from rpython.jit.metainterp.opencoder import FrontendTagOverflow
from rpython.jit.metainterp.resoperation import rop, AbstractResOp
from rpython.jit.metainterp.history import ConstInt, IntFrontendOp
from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer
@@ -204,3 +205,9 @@
t.record_op(rop.ESCAPE_N, [ConstInt(3)])
t.record_op(rop.FINISH, [i4])
assert t.get_dead_ranges() == [0, 0, 0, 0, 0, 3, 4, 5]
+
+ def test_tag_overflow(self):
+ t = Trace([], metainterp_sd)
+ i0 = FakeOp(100000)
+ py.test.raises(FrontendTagOverflow, t.record_op, rop.FINISH, [i0])
+ assert t.unpack() == ([], [])
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit