[pypy-commit] pypy default: failing test. unerased pointers make any dereference in the short preamble unsafe
hakanardo
noreply at buildbot.pypy.org
Fri Aug 5 09:40:17 CEST 2011
Author: Hakan Ardo <hakan at debian.org>
Branch:
Changeset: r46285:2ca138be14a7
Date: 2011-08-05 09:40 +0200
http://bitbucket.org/pypy/pypy/changeset/2ca138be14a7/
Log: failing test. unerased pointers make any dereference in the short
preamble unsafe
diff --git a/pypy/jit/metainterp/test/test_loop.py b/pypy/jit/metainterp/test/test_loop.py
--- a/pypy/jit/metainterp/test/test_loop.py
+++ b/pypy/jit/metainterp/test/test_loop.py
@@ -800,6 +800,37 @@
res = self.meta_interp(f, [200])
+
+ def test_unerased_pointers_in_short_preamble(self):
+ from pypy.rlib.rerased import new_erasing_pair
+ from pypy.rpython.lltypesystem import lltype
+ class A(object):
+ def __init__(self, val):
+ self.val = val
+ erase_A, unerase_A = new_erasing_pair('A')
+ erase_TP, unerase_TP = new_erasing_pair('TP')
+ TP = lltype.GcArray(lltype.Signed)
+ myjitdriver = JitDriver(greens = [], reds = ['n', 'm', 'i', 'j', 'sa', 'p'])
+ def f(n, m, j):
+ i = sa = 0
+ p = erase_A(A(7))
+ while i < n:
+ myjitdriver.jit_merge_point(n=n, m=m, i=i, j=j, sa=sa, p=p)
+ if i < m:
+ sa += unerase_A(p).val
+ elif i == m:
+ a = lltype.malloc(TP, 5)
+ a[0] = 42
+ p = erase_TP(a)
+ else:
+ sa += unerase_TP(p)[0]
+ sa += A(i).val
+ assert n>0 and m>0
+ i += j
+ return sa
+ res = self.meta_interp(f, [20, 10, 1])
+ assert res == f(20, 10, 1)
+
class TestOOtype(LoopTest, OOJitMixin):
pass
More information about the pypy-commit
mailing list