[pypy-commit] pypy default: Add (skipped, failing) tests for the constant_fold() done in pure.py on
arigo
noreply at buildbot.pypy.org
Sun Nov 8 04:53:23 EST 2015
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r80584:97dbcab3e9a0
Date: 2015-11-08 10:52 +0100
http://bitbucket.org/pypy/pypy/changeset/97dbcab3e9a0/
Log: Add (skipped, failing) tests for the constant_fold() done in pure.py
on possibly invalid GC pointers
diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py
--- a/rpython/jit/backend/llgraph/runner.py
+++ b/rpython/jit/backend/llgraph/runner.py
@@ -638,6 +638,7 @@
def bh_getarrayitem_gc(self, a, index, descr):
a = support.cast_arg(lltype.Ptr(descr.A), a)
array = a._obj
+ assert index >= 0
return support.cast_result(descr.A.OF, array.getitem(index))
bh_getarrayitem_gc_pure_i = bh_getarrayitem_gc
@@ -743,6 +744,7 @@
return s._obj.container.chars.getlength()
def bh_strgetitem(self, s, item):
+ assert item >= 0
return ord(s._obj.container.chars.getitem(item))
def bh_strsetitem(self, s, item, v):
@@ -764,6 +766,7 @@
return string._obj.container.chars.getlength()
def bh_unicodegetitem(self, string, index):
+ assert index >= 0
return ord(string._obj.container.chars.getitem(index))
def bh_unicodesetitem(self, string, index, newvalue):
diff --git a/rpython/jit/metainterp/executor.py b/rpython/jit/metainterp/executor.py
--- a/rpython/jit/metainterp/executor.py
+++ b/rpython/jit/metainterp/executor.py
@@ -409,7 +409,7 @@
def make_execute_function(name, func):
# Make a wrapper for 'func'. The func is a simple bhimpl_xxx function
# from the BlackholeInterpreter class. The wrapper is a new function
- # that receives and returns boxed values.
+ # that receives boxed values (but returns a non-boxed value).
for argtype in func.argtypes:
if argtype not in ('i', 'r', 'f', 'd', 'cpu'):
return None
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
@@ -9027,6 +9027,138 @@
# may either raise InvalidLoop or compile; it's a rare case
self.optimize_loop(ops, expected)
+ def test_unroll_pure_on_bogus_object_1(self):
+ py.test.skip("FIXME")
+ ops = """
+ [p0, i1]
+ i2 = int_gt(i1, 0)
+ guard_true(i2) []
+ getfield_gc_pure_i(p0, descr=valuedescr)
+ i3 = int_sub(i1, 1)
+ jump(NULL, i3)
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_unroll_pure_on_bogus_object_2(self):
+ py.test.skip("FIXME")
+ ops = """
+ [p0, i1]
+ i2 = int_gt(i1, 0)
+ guard_true(i2) []
+ getfield_gc_pure_i(p0, descr=valuedescr)
+ i3 = int_sub(i1, 1)
+ jump(ConstPtr(myptr3), i3)
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_unroll_pure_on_bogus_object_3(self):
+ py.test.skip("FIXME")
+ ops = """
+ [p0, i1]
+ i2 = int_gt(i1, 0)
+ guard_true(i2) []
+ getarrayitem_gc_pure_i(p0, 5, descr=arraydescr)
+ i3 = int_sub(i1, 1)
+ jump(NULL, i3)
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_unroll_pure_on_bogus_object_4(self):
+ py.test.skip("FIXME")
+ ops = """
+ [p0, i1]
+ i2 = int_gt(i1, 0)
+ guard_true(i2) []
+ getarrayitem_gc_pure_i(p0, 5, descr=arraydescr)
+ i3 = int_sub(i1, 1)
+ jump(ConstPtr(myptr3), i3)
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_unroll_pure_on_bogus_object_5(self):
+ py.test.skip("FIXME")
+ ops = """
+ [p0, i1]
+ i2 = int_gt(i1, 0)
+ guard_true(i2) []
+ getarrayitem_gc_pure_i(p0, 125, descr=arraydescr)
+ i3 = int_sub(i1, 1)
+ jump(ConstPtr(arrayref), i3) # too short, length < 126!
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_unroll_pure_on_bogus_object_6(self):
+ py.test.skip("FIXME")
+ ops = """
+ [i0, i1]
+ i2 = int_gt(i1, 0)
+ guard_true(i2) []
+ getarrayitem_gc_pure_i(ConstPtr(arrayref), i0, descr=arraydescr)
+ i3 = int_sub(i1, 1)
+ jump(125, i3) # arrayref is too short, length < 126!
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_unroll_pure_on_bogus_object_7(self):
+ py.test.skip("FIXME")
+ ops = """
+ [i0, i1]
+ i2 = int_gt(i1, 0)
+ guard_true(i2) []
+ getarrayitem_gc_pure_i(ConstPtr(arrayref), i0, descr=arraydescr)
+ i3 = int_sub(i1, 1)
+ jump(-1, i3) # cannot access array item -1!
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_unroll_pure_on_bogus_object_8(self):
+ py.test.skip("FIXME")
+ ops = """
+ [p0, i1]
+ i2 = int_gt(i1, 0)
+ guard_true(i2) []
+ i4 = strgetitem(p0, 125)
+ i3 = int_sub(i1, 1)
+ jump(NULL, i3)
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_unroll_pure_on_bogus_object_9(self):
+ py.test.skip("FIXME")
+ ops = """
+ [p0, i1]
+ i2 = int_gt(i1, 0)
+ guard_true(i2) []
+ i4 = strgetitem(p0, 125)
+ i3 = int_sub(i1, 1)
+ jump(ConstPtr(myptr), i3) # not a string at all
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_unroll_pure_on_bogus_object_10(self):
+ py.test.skip("FIXME")
+ ops = """
+ [i0, i1]
+ i2 = int_gt(i1, 0)
+ guard_true(i2) []
+ i4 = strgetitem("foobar", i0)
+ i3 = int_sub(i1, 1)
+ jump(125, i3) # string is too short!
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_unroll_pure_on_bogus_object_11(self):
+ py.test.skip("FIXME")
+ ops = """
+ [i0, i1]
+ i2 = int_gt(i1, 0)
+ guard_true(i2) []
+ i4 = strgetitem("foobar", i0)
+ i3 = int_sub(i1, 1)
+ jump(-1, i3) # cannot access character -1!
+ """
+ self.optimize_loop(ops, ops)
+
class TestLLtype(OptimizeOptTest, LLtypeMixin):
pass
More information about the pypy-commit
mailing list