[pypy-commit] pypy jit-targets: we cant assume the virtual states always match at this point anymore
hakanardo
noreply at buildbot.pypy.org
Sat Dec 3 15:33:26 CET 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-targets
Changeset: r50088:27339b188388
Date: 2011-12-03 15:32 +0100
http://bitbucket.org/pypy/pypy/changeset/27339b188388/
Log: we cant assume the virtual states always match at this point anymore
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_multilabel.py b/pypy/jit/metainterp/optimizeopt/test/test_multilabel.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_multilabel.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_multilabel.py
@@ -101,6 +101,17 @@
"""
with raises(InvalidLoop):
self.optimize_loop(ops, ops)
+
+ def test_virtual_arrays_with_nonmatching_lens(self):
+ ops = """
+ [p1]
+ p2 = new_array(3, descr=arraydescr)
+ label(p2)
+ p4 = new_array(2, descr=arraydescr)
+ jump(p4)
+ """
+ with raises(InvalidLoop):
+ self.optimize_loop(ops, ops)
class TestLLtype(BaseTestMultiLabel, LLtypeMixin):
diff --git a/pypy/jit/metainterp/optimizeopt/virtualstate.py b/pypy/jit/metainterp/optimizeopt/virtualstate.py
--- a/pypy/jit/metainterp/optimizeopt/virtualstate.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualstate.py
@@ -110,7 +110,10 @@
if not value.is_virtual():
raise BadVirtualState
for i in range(len(self.fielddescrs)):
- v = value._fields[self.fielddescrs[i]]
+ try:
+ v = value._fields[self.fielddescrs[i]]
+ except KeyError:
+ raise BadVirtualState
s = self.fieldstate[i]
if s.position > self.position:
s.enum_forced_boxes(boxes, v, optimizer)
@@ -188,7 +191,10 @@
if not value.is_virtual():
raise BadVirtualState
for i in range(len(self.fieldstate)):
- v = value._items[i]
+ try:
+ v = value._items[i]
+ except IndexError:
+ raise BadVirtualState
s = self.fieldstate[i]
if s.position > self.position:
s.enum_forced_boxes(boxes, v, optimizer)
@@ -259,7 +265,12 @@
p = 0
for i in range(len(self.fielddescrs)):
for j in range(len(self.fielddescrs[i])):
- v = value._items[i][self.fielddescrs[i][j]]
+ try:
+ v = value._items[i][self.fielddescrs[i][j]]
+ except IndexError:
+ raise BadVirtualState
+ except KeyError:
+ raise BadVirtualState
s = self.fieldstate[p]
if s.position > self.position:
s.enum_forced_boxes(boxes, v, optimizer)
More information about the pypy-commit
mailing list