Author: Hakan Ardo <[email protected]>
Branch: jit-opaque-licm
Changeset: r56413:8d6c12547231
Date: 2012-07-23 20:00 +0200
http://bitbucket.org/pypy/pypy/changeset/8d6c12547231/

Log:    test and fix

diff --git a/pypy/jit/metainterp/optimizeopt/test/test_multilabel.py 
b/pypy/jit/metainterp/optimizeopt/test/test_multilabel.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_multilabel.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_multilabel.py
@@ -459,6 +459,25 @@
         """
         self.optimize_loop(ops, expected)
 
+    def test_opaque_pointer_fails_to_close_loop(self):
+        ops = """
+        [p1, p11]
+        p2 = getfield_gc(p1, descr=nextdescr) 
+        guard_class(p2, ConstClass(node_vtable)) []
+        mark_opaque_ptr(p2)        
+        i3 = getfield_gc(p2, descr=otherdescr)
+        label(p1, p11)
+        p12 = getfield_gc(p1, descr=nextdescr) 
+        i13 = getfield_gc(p2, descr=otherdescr)
+        i14 = call(i13, descr=nonwritedescr)        
+        jump(p11, p1)
+        """
+        with raises(InvalidLoop):
+            self.optimize_loop(ops, ops)
+
+            
+
+
 class OptRenameStrlen(Optimization):
     def propagate_forward(self, op):
         dispatch_opt(self, op)
diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py 
b/pypy/jit/metainterp/optimizeopt/unroll.py
--- a/pypy/jit/metainterp/optimizeopt/unroll.py
+++ b/pypy/jit/metainterp/optimizeopt/unroll.py
@@ -343,7 +343,10 @@
             self.optimizer.send_extra_operation(newop)
             if op.result in self.short_boxes.assumed_classes:
                 classbox = 
self.getvalue(newop.result).get_constant_class(self.optimizer.cpu)
-                assert 
classbox.same_constant(self.short_boxes.assumed_classes[op.result])
+                assumed_classbox = self.short_boxes.assumed_classes[op.result]
+                if not classbox or not 
classbox.same_constant(assumed_classbox):
+                    raise InvalidLoop('Class of opaque pointer needed in short 
' +
+                                      'preamble unknown at en of loop')
             i += 1
 
         # Import boxes produced in the preamble but used in the loop
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to