Author: Carl Friedrich Bolz-Tereick <cfb...@gmx.de> Branch: Changeset: r94470:b0fdbba6aeab Date: 2018-05-04 15:25 +0200 http://bitbucket.org/pypy/pypy/changeset/b0fdbba6aeab/
Log: fix a very rare segfault in the JIT, shown by Pycket (neither did I manage to write a test, nor to fix the broken invariant, which we've seen in other contexts before already.) diff --git a/rpython/jit/metainterp/optimizeopt/info.py b/rpython/jit/metainterp/optimizeopt/info.py --- a/rpython/jit/metainterp/optimizeopt/info.py +++ b/rpython/jit/metainterp/optimizeopt/info.py @@ -260,6 +260,12 @@ # we don't know about this item return op = optimizer.get_box_replacement(self._fields[fielddescr.get_index()]) + if op is None: + # XXX same bug as in serialize_opt: + # op should never be None, because that's an invariant violation in + # AbstractCachedEntry. But it still seems to happen when the info + # is attached to a Constant. At least we shouldn't crash. + return opnum = OpHelpers.getfield_for_descr(fielddescr) getfield_op = ResOperation(opnum, [structbox], descr=fielddescr) shortboxes.add_heap_op(op, getfield_op) @@ -589,6 +595,7 @@ return item = self._items[index] if item is not None: + # see comment in AbstractStructPtrInfo.produce_short_preamble_ops op = optimizer.get_box_replacement(item) opnum = OpHelpers.getarrayitem_for_descr(descr) getarrayitem_op = ResOperation(opnum, [structbox, ConstInt(index)], _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit