Author: fijal Branch: release-5.x Changeset: r83113:07e163f8e2ff Date: 2016-03-17 16:15 +0200 http://bitbucket.org/pypy/pypy/changeset/07e163f8e2ff/
Log: add a -live- to greenfield op since it can call nonstandard virtualizable, how to reproduce a crash with a test diff --git a/rpython/jit/codewriter/jtransform.py b/rpython/jit/codewriter/jtransform.py --- a/rpython/jit/codewriter/jtransform.py +++ b/rpython/jit/codewriter/jtransform.py @@ -784,11 +784,13 @@ return [] # check for _immutable_fields_ hints immut = v_inst.concretetype.TO._immutable_field(c_fieldname.value) + need_live = False if immut: if (self.callcontrol is not None and self.callcontrol.could_be_green_field(v_inst.concretetype.TO, c_fieldname.value)): pure = '_greenfield' + need_live = True else: pure = '_pure' else: @@ -815,10 +817,12 @@ descr1 = self.cpu.fielddescrof( v_inst.concretetype.TO, quasiimmut.get_mutate_field_name(c_fieldname.value)) - op1 = [SpaceOperation('-live-', [], None), + return [SpaceOperation('-live-', [], None), SpaceOperation('record_quasiimmut_field', [v_inst, descr, descr1], None), op1] + if need_live: + return [SpaceOperation('-live-', [], None), op1] return op1 def rewrite_op_setfield(self, op, override_type=None): diff --git a/rpython/jit/codewriter/test/test_jtransform.py b/rpython/jit/codewriter/test/test_jtransform.py --- a/rpython/jit/codewriter/test/test_jtransform.py +++ b/rpython/jit/codewriter/test/test_jtransform.py @@ -1024,7 +1024,8 @@ v1 = varoftype(lltype.Ptr(S)) v2 = varoftype(lltype.Char) op = SpaceOperation('getfield', [v1, Constant('x', lltype.Void)], v2) - op1 = Transformer(FakeCPU(), FakeCC()).rewrite_operation(op) + op0, op1 = Transformer(FakeCPU(), FakeCC()).rewrite_operation(op) + assert op0.opname == '-live-' assert op1.opname == 'getfield_gc_i_greenfield' assert op1.args == [v1, ('fielddescr', S, 'x')] assert op1.result == v2 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit