Author: Remi Meier <remi.me...@inf.ethz.ch>
Branch: stmgc-c7
Changeset: r71368:9e10d6372feb
Date: 2014-05-07 13:41 +0200
http://bitbucket.org/pypy/pypy/changeset/9e10d6372feb/

Log:    does_any_allocation in rewrite should be cleared on labels

diff --git a/rpython/jit/backend/llsupport/rewrite.py 
b/rpython/jit/backend/llsupport/rewrite.py
--- a/rpython/jit/backend/llsupport/rewrite.py
+++ b/rpython/jit/backend/llsupport/rewrite.py
@@ -36,6 +36,8 @@
     _previous_size = -1
     _op_malloc_nursery = None
     _v_last_malloced_nursery = None
+
+    # does_any_alloc tells us if we did any allocation since the last LABEL
     does_any_allocation = False
 
     def __init__(self, gc_ll_descr, cpu):
@@ -64,6 +66,7 @@
             elif op.getopnum() == rop.LABEL:
                 self.emitting_an_operation_that_can_collect()
                 self.known_lengths.clear()
+                self.does_any_allocation = False
             # ---------- write barriers ----------
             if self.gc_ll_descr.write_barrier_descr is not None:
                 if op.getopnum() == rop.SETFIELD_GC:
diff --git a/rpython/jit/backend/llsupport/test/test_stmrewrite.py 
b/rpython/jit/backend/llsupport/test/test_stmrewrite.py
--- a/rpython/jit/backend/llsupport/test/test_stmrewrite.py
+++ b/rpython/jit/backend/llsupport/test/test_stmrewrite.py
@@ -1267,3 +1267,19 @@
         i2 = stm_should_break_transaction(0)
         jump(i1, i2)
         """)
+
+    def test_label_stm_should_break_allocation(self):
+        self.check_rewrite("""
+        []
+        p2 = new(descr=tdescr)
+        label()
+        i1 = stm_should_break_transaction(0)
+        jump(i1)
+        """, """
+        []
+        p2 = call_malloc_nursery(%(tdescr.size)d)
+        setfield_gc(p2, %(tdescr.tid)d, descr=tiddescr)
+        label()
+        i1 = stm_should_break_transaction(1)
+        jump(i1)
+        """)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to