Author: Hakan Ardo <ha...@debian.org> Branch: jit-short_from_state Changeset: r44723:a246b848afe7 Date: 2011-06-05 17:29 +0200 http://bitbucket.org/pypy/pypy/changeset/a246b848afe7/
Log: guard_class needs to be guarded with guard_nonnull diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py --- a/pypy/jit/metainterp/optimizeopt/optimizer.py +++ b/pypy/jit/metainterp/optimizeopt/optimizer.py @@ -56,6 +56,8 @@ op = ResOperation(rop.GUARD_VALUE, [box, self.box], None) guards.append(op) elif self.level == LEVEL_KNOWNCLASS: + op = ResOperation(rop.GUARD_NONNULL, [box], None) + guards.append(op) op = ResOperation(rop.GUARD_CLASS, [box, self.known_class], None) guards.append(op) else: diff --git a/pypy/jit/metainterp/test/test_virtualstate.py b/pypy/jit/metainterp/test/test_virtualstate.py --- a/pypy/jit/metainterp/test/test_virtualstate.py +++ b/pypy/jit/metainterp/test/test_virtualstate.py @@ -165,7 +165,24 @@ """ self.guards(info1, info2, self.nodebox, expected) py.test.raises(InvalidLoop, self.guards, - info1, info2, BoxPtr(), expected) + info1, info2, BoxPtr(), expected) + + def test_known_class_value(self): + value1 = OptValue(self.nodebox) + classbox = self.cpu.ts.cls_of_box(self.nodebox) + value1.make_constant_class(classbox, -1) + box = self.nodebox + guards = value1.make_guards(box) + expected = """ + [p0] + guard_nonnull(p0) [] + guard_class(p0, ConstClass(node_vtable)) [] + """ + loop = self.parse(expected) + assert equaloplists(guards, loop.operations, False, + {loop.inputargs[0]: box}) + + class TestLLtype(BaseTestGenerateGuards, LLtypeMixin): pass _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit