[pypy-commit] pypy jitframe-on-heap: a failing test
fijal
noreply at buildbot.pypy.org
Tue Feb 19 20:24:34 CET 2013
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: jitframe-on-heap
Changeset: r61464:ee50f2d7022a
Date: 2013-02-19 15:43 +0200
http://bitbucket.org/pypy/pypy/changeset/ee50f2d7022a/
Log: a failing test
diff --git a/rpython/jit/backend/llsupport/llmodel.py b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -79,6 +79,8 @@
base_ofs = self.get_baseofs_of_frame_field()
def realloc_frame(frame, size):
+ if not we_are_translated():
+ assert not self._exception_emulator[0]
frame = lltype.cast_opaque_ptr(jitframe.JITFRAMEPTR, frame)
if size > frame.jf_frame_info.jfi_frame_depth:
# update the frame_info size, which is for whatever reason
diff --git a/rpython/jit/backend/test/runner_test.py b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -3796,3 +3796,62 @@
frame = lltype.cast_opaque_ptr(jitframe.JITFRAMEPTR, frame)
assert len(frame.jf_frame) == frame.jf_frame_info.jfi_frame_depth
+
+ def test_compile_bridge_while_running_guard_no_exc(self):
+ xtp = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True)
+ xtp.subclassrange_min = 1
+ xtp.subclassrange_max = 3
+ X = lltype.GcStruct('X', ('parent', rclass.OBJECT),
+ hints={'vtable': xtp._obj})
+ xptr = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(X))
+ def raising():
+ bridge = parse("""
+ [i1, i2]
+ guard_exception(ConstClass(xtp), descr=faildescr2) [i1, i2]
+ i3 = int_add(i1, i2)
+ i4 = int_add(i1, i3)
+ i5 = int_add(i1, i4)
+ i6 = int_add(i4, i5)
+ i7 = int_add(i6, i5)
+ i8 = int_add(i5, 1)
+ i9 = int_add(i8, 1)
+ force_spill(i1)
+ force_spill(i2)
+ force_spill(i3)
+ force_spill(i4)
+ force_spill(i5)
+ force_spill(i6)
+ force_spill(i7)
+ force_spill(i8)
+ force_spill(i9)
+ guard_true(i9) [i3, i4, i5, i6, i7, i8, i9]
+ finish(i9, descr=finaldescr)
+ """, namespace={'finaldescr': BasicFinalDescr(42),
+ 'faildescr2': BasicFailDescr(1),
+ 'xtp': xtp
+ })
+ self.cpu.compile_bridge(faildescr, bridge.inputargs,
+ bridge.operations, looptoken)
+ raise LLException(xtp, xptr)
+
+ faildescr = BasicFailDescr(0)
+ FUNC = self.FuncType([], lltype.Void)
+ raising_ptr = llhelper(lltype.Ptr(FUNC), raising)
+ calldescr = self.cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
+ EffectInfo.MOST_GENERAL)
+
+ looptoken = JitCellToken()
+ loop = parse("""
+ [i0, i1, i2]
+ call(ConstClass(raising_ptr), descr=calldescr)
+ guard_no_exception(descr=faildescr) [i1, i2]
+ finish(i2, descr=finaldescr2)
+ """, namespace={'raising_ptr': raising_ptr,
+ 'calldescr': calldescr,
+ 'faildescr': faildescr,
+ 'finaldescr2': BasicFinalDescr(1)})
+
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+ frame = self.cpu.execute_token(looptoken, 1, 2, 3)
+ descr = self.cpu.get_latest_descr(frame)
+ assert descr.identifier == 42
More information about the pypy-commit
mailing list