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

Reply via email to