[pypy-commit] pypy default: Make the test more similar to pypy/module/_cffi_backend.
arigo
noreply at buildbot.pypy.org
Sun Oct 6 13:23:21 CEST 2013
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r67164:d0b269c45840
Date: 2013-10-06 13:22 +0200
http://bitbucket.org/pypy/pypy/changeset/d0b269c45840/
Log: Make the test more similar to pypy/module/_cffi_backend. Crashes
when a guard fails in the middle of the virtualized raw-malloc
buffer.
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
@@ -381,6 +381,8 @@
res = self.llinterp.eval_graph(ptr._obj.graph, args)
else:
res = ptr._obj._callable(*args)
+ if RESULT is lltype.Void:
+ return None
return support.cast_result(RESULT, res)
def _do_call(self, func, args_i, args_r, args_f, calldescr):
diff --git a/rpython/jit/metainterp/test/test_fficall.py b/rpython/jit/metainterp/test/test_fficall.py
--- a/rpython/jit/metainterp/test/test_fficall.py
+++ b/rpython/jit/metainterp/test/test_fficall.py
@@ -86,15 +86,17 @@
data = rffi.ptradd(exchange_buffer, ofs)
rffi.cast(lltype.Ptr(TYPE), data)[0] = write_rvalue
- def f():
+ def f(i):
exbuf = lltype.malloc(rffi.CCHARP.TO, (len(avalues)+2) * 16,
- flavor='raw', zero=True)
- ofs = 16
+ flavor='raw')
+
+ targetptr = rffi.ptradd(exbuf, 16)
for avalue in unroll_avalues:
TYPE = rffi.CArray(lltype.typeOf(avalue))
- data = rffi.ptradd(exbuf, ofs)
- rffi.cast(lltype.Ptr(TYPE), data)[0] = avalue
- ofs += 16
+ if i == 9: # a guard that can fail
+ pass
+ rffi.cast(lltype.Ptr(TYPE), targetptr)[0] = avalue
+ targetptr = rffi.ptradd(targetptr, 16)
jit_ffi_call(cif_description, func_addr, exbuf)
@@ -102,8 +104,7 @@
res = 654321
else:
TYPE = rffi.CArray(lltype.typeOf(rvalue))
- data = rffi.ptradd(exbuf, ofs)
- res = rffi.cast(lltype.Ptr(TYPE), data)[0]
+ res = rffi.cast(lltype.Ptr(TYPE), targetptr)[0]
lltype.free(exbuf, flavor='raw')
if lltype.typeOf(res) is lltype.SingleFloat:
res = float(res)
@@ -117,9 +118,9 @@
return res == rvalue
with FakeFFI(fake_call_impl_any):
- res = f()
+ res = f(-42)
assert matching_result(res, rvalue)
- res = self.interp_operations(f, [],
+ res = self.interp_operations(f, [-42],
supports_floats = supports_floats,
supports_longlong = supports_longlong,
supports_singlefloats = supports_singlefloats)
@@ -132,6 +133,19 @@
self.check_operations_history(call_may_force=0,
call_release_gil=expected_call_release_gil)
+ ##################################################
+ driver = jit.JitDriver(reds=['i'], greens=[])
+ def main():
+ i = 0
+ while 1:
+ driver.jit_merge_point(i=i)
+ res = f(i)
+ i += 1
+ if i == 12:
+ return res
+ self.meta_interp(main, [])
+
+
def test_simple_call_int(self):
self._run([types.signed] * 2, types.signed, [456, 789], -42)
More information about the pypy-commit
mailing list