Author: Hakan Ardo <ha...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit