[pypy-svn] r79351 - in pypy/branch/jit-free/pypy/jit/metainterp: optimizeopt test
arigo at codespeak.net
arigo at codespeak.net
Mon Nov 22 17:58:17 CET 2010
Author: arigo
Date: Mon Nov 22 17:58:15 2010
New Revision: 79351
Modified:
pypy/branch/jit-free/pypy/jit/metainterp/optimizeopt/optimizer.py
pypy/branch/jit-free/pypy/jit/metainterp/test/test_exception.py
pypy/branch/jit-free/pypy/jit/metainterp/test/test_optimizeopt.py
Log:
Merge r79349-r79350 from trunk.
Modified: pypy/branch/jit-free/pypy/jit/metainterp/optimizeopt/optimizer.py
==============================================================================
--- pypy/branch/jit-free/pypy/jit/metainterp/optimizeopt/optimizer.py (original)
+++ pypy/branch/jit-free/pypy/jit/metainterp/optimizeopt/optimizer.py Mon Nov 22 17:58:15 2010
@@ -299,7 +299,9 @@
return CVAL_ZERO
def propagate_all_forward(self):
- self.exception_might_have_happened = False
+ self.exception_might_have_happened = True
+ # ^^^ at least at the start of bridges. For loops, we could set
+ # it to False, but we probably don't care
self.newoperations = []
self.i = 0
while self.i < len(self.loop.operations):
Modified: pypy/branch/jit-free/pypy/jit/metainterp/test/test_exception.py
==============================================================================
--- pypy/branch/jit-free/pypy/jit/metainterp/test/test_exception.py (original)
+++ pypy/branch/jit-free/pypy/jit/metainterp/test/test_exception.py Mon Nov 22 17:58:15 2010
@@ -1,6 +1,6 @@
import py, sys
from pypy.jit.metainterp.test.test_basic import LLJitMixin, OOJitMixin
-from pypy.rlib.jit import JitDriver, OPTIMIZER_SIMPLE
+from pypy.rlib.jit import JitDriver, OPTIMIZER_SIMPLE, dont_look_inside
from pypy.rlib.rarithmetic import ovfcheck, LONG_BIT, intmask
from pypy.jit.codewriter.policy import StopAtXPolicy
@@ -588,6 +588,33 @@
res = self.interp_operations(f, [99])
assert res == 21
+ def test_bug_exc1_noexc_exc2(self):
+ myjitdriver = JitDriver(greens=[], reds=['i'])
+ @dont_look_inside
+ def rescall(i):
+ if i < 10:
+ raise KeyError
+ if i < 20:
+ return None
+ raise ValueError
+ def f(i):
+ while i < 30:
+ myjitdriver.can_enter_jit(i=i)
+ myjitdriver.jit_merge_point(i=i)
+ try:
+ rescall(i)
+ except KeyError:
+ assert i < 10
+ except ValueError:
+ assert i >= 20
+ else:
+ assert 10 <= i < 20
+ i += 1
+ return i
+ res = self.meta_interp(f, [0], inline=True)
+ assert res == 30
+
+
class MyError(Exception):
def __init__(self, n):
self.n = n
Modified: pypy/branch/jit-free/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/branch/jit-free/pypy/jit/metainterp/test/test_optimizeopt.py (original)
+++ pypy/branch/jit-free/pypy/jit/metainterp/test/test_optimizeopt.py Mon Nov 22 17:58:15 2010
@@ -789,8 +789,12 @@
i3 = call(i2, descr=nonwritedescr)
jump(i1) # the exception is considered lost when we loop back
"""
+ # note that 'guard_no_exception' at the very start must be kept
+ # around: bridges may start with one. (In case of loops we could
+ # remove it, but we probably don't care.)
expected = """
[i]
+ guard_no_exception() []
i1 = int_add(i, 3)
i2 = call(i1, descr=nonwritedescr)
guard_no_exception() [i1, i2]
More information about the Pypy-commit
mailing list