Author: Spenser Andrew Bauman <saba...@gmail.com> Branch: force-virtual-state Changeset: r86951:9fea14c01cc4 Date: 2016-09-07 18:46 -0400 http://bitbucket.org/pypy/pypy/changeset/9fea14c01cc4/
Log: Add test case for generating the proper guard on a raw pointer during short preamble creation diff --git a/rpython/jit/metainterp/test/test_ajit.py b/rpython/jit/metainterp/test/test_ajit.py --- a/rpython/jit/metainterp/test/test_ajit.py +++ b/rpython/jit/metainterp/test/test_ajit.py @@ -4508,3 +4508,38 @@ return i self.meta_interp(f, []) + def test_round_trip_raw_pointer(self): + driver = JitDriver(greens=[], reds=['i', 'val']) + + class Box(object): + _immutable_fields_ = ['_ptr'] + _ptr = lltype.nullptr(rffi.CCHARP.TO) + + def new_int_buffer(value): + data = lltype.malloc(rffi.CCHARP.TO, noConst(rffi.sizeof(rffi.INT)), flavor='raw', zero=True) + rffi.cast(rffi.INTP, data)[0] = rffi.cast(rffi.INT, value) + return data + + def read_int_buffer(buf): + return rffi.cast(rffi.INTP, buf)[0] + + def f(): + i = 0 + val = Box() + val._ptr = new_int_buffer(1) + + set_param(None, 'retrace_limit', -1) + while i < 100: + driver.jit_merge_point(i=i, val=val) + driver.can_enter_jit(i=i, val=val) + tgt = val._ptr + if i & 0b100: + i += 1 + i += int(read_int_buffer(val._ptr)) + lltype.free(val._ptr, flavor='raw') + val._ptr = new_int_buffer(1) + lltype.free(val._ptr, flavor='raw') + + self.meta_interp(f, []) + self.check_resops(guard_nonnull=0) + _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit