Author: Carl Friedrich Bolz <[email protected]>
Branch:
Changeset: r74096:fcfff2e158f1
Date: 2014-10-22 18:20 +0200
http://bitbucket.org/pypy/pypy/changeset/fcfff2e158f1/
Log: fix a crash related to new_array_clear in unroll.py
test is not quite satisfactory, very unit-testy. I did not manage to
understand the real code that produced this.
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
@@ -761,6 +761,24 @@
assert not vstate1.generalization_of(vstate2)
+ def test_crash_varay_clear(self):
+ innervalue1 = OptValue(self.nodebox)
+ constclassbox = self.cpu.ts.cls_of_box(self.nodebox)
+ innervalue1.make_constant_class(constclassbox, -1)
+ innerinfo1 = NotVirtualStateInfo(innervalue1)
+ innerinfo1.position = 1
+ innerinfo1.position_in_notvirtuals = 0
+
+ descr = object()
+
+ info1 = VArrayStateInfo(descr)
+ info1.fieldstate = [innerinfo1]
+
+ constvalue = self.cpu.ts.CVAL_NULLREF
+ value1 = VArrayValue(descr, constvalue, 1, self.nodebox, clear=True)
+ value1._items[0] = constvalue
+ info1.enum_forced_boxes([None], value1, None)
+
class BaseTestBridges(BaseTest):
enable_opts = "intbounds:rewrite:virtualize:string:pure:heap:unroll"
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py
b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -205,6 +205,8 @@
raise BadVirtualState
for i in range(len(self.fieldstate)):
v = value.get_item_value(i)
+ if v is None:
+ v = value.get_missing_null_value()
s = self.fieldstate[i]
if s.position > self.position:
s.enum_forced_boxes(boxes, v, optimizer)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit