[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