Author: Carl Friedrich Bolz <[email protected]>
Branch:
Changeset: r60690:2ef0f6edb727
Date: 2013-01-29 16:53 +0100
http://bitbucket.org/pypy/pypy/changeset/2ef0f6edb727/
Log: a sanity check: a guard_value of a virtual object will always fail,
thus the loop is invalid.
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py
b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -239,6 +239,8 @@
def optimize_GUARD_VALUE(self, op):
value = self.getvalue(op.getarg(0))
+ if value.is_virtual():
+ raise InvalidLoop('A promote of a virtual (a recently allocated
object) never makes sense!')
if value.last_guard:
# there already has been a guard_nonnull or guard_class or
# guard_nonnull_class on this value, which is rather silly.
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -2623,7 +2623,7 @@
jump(p2)
"""
self.raises(InvalidLoop, self.optimize_loop,
- ops, ops)
+ ops, "crash!")
def test_invalid_loop_2(self):
ops = """
@@ -2635,7 +2635,7 @@
jump(p2)
"""
self.raises(InvalidLoop, self.optimize_loop,
- ops, ops)
+ ops, "crash!")
def test_invalid_loop_3(self):
ops = """
@@ -2648,8 +2648,17 @@
setfield_gc(p3, p4, descr=nextdescr)
jump(p3)
"""
- self.raises(InvalidLoop, self.optimize_loop, ops, ops)
-
+ self.raises(InvalidLoop, self.optimize_loop, ops, "crash!")
+
+ def test_invalid_loop_guard_value_of_virtual(self):
+ ops = """
+ [p1]
+ p2 = new_with_vtable(ConstClass(node_vtable))
+ guard_value(p2, ConstPtr(myptr)) []
+ jump(p2)
+ """
+ self.raises(InvalidLoop, self.optimize_loop,
+ ops, "crash!")
def test_merge_guard_class_guard_value(self):
ops = """
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit