[pypy-commit] pypy default: a test and a fix
fijal
noreply at buildbot.pypy.org
Sun Oct 4 15:41:43 CEST 2015
Author: fijal
Branch:
Changeset: r79974:accbdbfd3b8e
Date: 2015-10-04 15:41 +0200
http://bitbucket.org/pypy/pypy/changeset/accbdbfd3b8e/
Log: a test and a fix
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -2331,7 +2331,7 @@
if isinstance(key, compile.ResumeAtPositionDescr):
self.seen_loop_header_for_jdindex = self.jitdriver_sd.index
try:
- self.prepare_resume_from_failure(deadframe, key)
+ self.prepare_resume_from_failure(deadframe, resumedescr)
if self.resumekey_original_loop_token is None: # very rare case
raise SwitchToBlackhole(Counters.ABORT_BRIDGE)
self.interpret()
diff --git a/rpython/jit/metainterp/test/test_exception.py b/rpython/jit/metainterp/test/test_exception.py
--- a/rpython/jit/metainterp/test/test_exception.py
+++ b/rpython/jit/metainterp/test/test_exception.py
@@ -3,6 +3,7 @@
from rpython.rlib.jit import JitDriver, dont_look_inside
from rpython.rlib.rarithmetic import ovfcheck, LONG_BIT, intmask
from rpython.jit.codewriter.policy import StopAtXPolicy
+from rpython.rtyper.lltypesystem import lltype, rffi
class ExceptionTests:
@@ -60,6 +61,33 @@
res = self.meta_interp(f, [21], policy=StopAtXPolicy(check))
assert res == f(21)
+ def test_bridge_from_guard_exception_may_force(self):
+ myjitdriver = JitDriver(greens = [], reds = ['n'])
+
+ c_time = rffi.llexternal("time", [lltype.Signed], lltype.Signed)
+
+ def check(n):
+ if n % 2:
+ raise ValueError
+ if n == 100000:
+ c_time(0)
+
+ def f(n):
+ while n > 0:
+ myjitdriver.can_enter_jit(n=n)
+ myjitdriver.jit_merge_point(n=n)
+ try:
+ check(n)
+ n -= 1
+ except ValueError:
+ n -= 3
+ return n
+
+ res = self.meta_interp(f, [20], policy=StopAtXPolicy(check))
+ assert res == f(20)
+ res = self.meta_interp(f, [21], policy=StopAtXPolicy(check))
+ assert res == f(21)
+
def test_bridge_from_guard_no_exception(self):
myjitdriver = JitDriver(greens = [], reds = ['n'])
def check(n):
More information about the pypy-commit
mailing list