Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r89118:e58b69ffe5aa Date: 2016-12-17 17:59 +0100 http://bitbucket.org/pypy/pypy/changeset/e58b69ffe5aa/
Log: flow space: only emit ll_assert_not_none() in some forms of raise, not if we built the exception instance just now diff --git a/rpython/flowspace/flowcontext.py b/rpython/flowspace/flowcontext.py --- a/rpython/flowspace/flowcontext.py +++ b/rpython/flowspace/flowcontext.py @@ -599,6 +599,7 @@ """ from rpython.rlib.debug import ll_assert_not_none + check_not_none = False w_is_type = op.isinstance(w_arg1, const(type)).eval(self) if self.guessbool(w_is_type): # this is for all cases of the form (Class, something) @@ -610,6 +611,7 @@ if self.guessbool(op.issubtype(w_valuetype, w_arg1).eval(self)): # raise Type, Instance: let etype be the exact type of value w_value = w_arg2 + check_not_none = True else: # raise Type, X: assume X is the constructor argument w_value = op.simple_call(w_arg1, w_arg2).eval(self) @@ -620,7 +622,10 @@ "separate value") raise Raise(const(exc)) w_value = w_arg1 - w_value = op.simple_call(const(ll_assert_not_none), w_value).eval(self) + check_not_none = True + if check_not_none: + w_value = op.simple_call(const(ll_assert_not_none), + w_value).eval(self) w_type = op.type(w_value).eval(self) return FSException(w_type, w_value) diff --git a/rpython/jit/codewriter/test/test_flatten.py b/rpython/jit/codewriter/test/test_flatten.py --- a/rpython/jit/codewriter/test/test_flatten.py +++ b/rpython/jit/codewriter/test/test_flatten.py @@ -466,6 +466,14 @@ int_return $True """, transform=True) + def test_assert_disappears(self): + def f(i): + assert i > 5 + return i + self.encoding_test(f, [7], """ + int_return %i0 + """) + def test_int_floordiv_ovf_zer(self): def f(i, j): assert i >= 0 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit