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): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit