[pypy-commit] pypy gc-incminimark-pinning: add test with two pinned objects and a non-pinned in between

groggi noreply at buildbot.pypy.org
Mon Jun 30 16:11:08 CEST 2014


Author: Gregor Wegberg <code at gregorwegberg.com>
Branch: gc-incminimark-pinning
Changeset: r72288:719bf1e31183
Date: 2014-06-25 18:41 +0200
http://bitbucket.org/pypy/pypy/changeset/719bf1e31183/

Log:	add test with two pinned objects and a non-pinned in between

diff --git a/rpython/jit/backend/llsupport/test/test_object_pinning_rewrite.py b/rpython/jit/backend/llsupport/test/test_object_pinning_rewrite.py
--- a/rpython/jit/backend/llsupport/test/test_object_pinning_rewrite.py
+++ b/rpython/jit/backend/llsupport/test/test_object_pinning_rewrite.py
@@ -40,6 +40,11 @@
         pinned_obj_gcref = lltype.cast_opaque_ptr(llmemory.GCREF, pinned_obj_ptr)
         assert rgc.pin(pinned_obj_gcref)
         #
+        notpinned_obj_type = lltype.GcStruct('NOT_PINNED_STRUCT', ('my_int', lltype.Signed))
+        notpinned_obj_my_int_descr = get_field_descr(self.gc_ll_descr, notpinned_obj_type, 'my_int')
+        notpinned_obj_ptr = lltype.malloc(notpinned_obj_type)
+        notpinned_obj_gcref = lltype.cast_opaque_ptr(llmemory.GCREF, notpinned_obj_ptr)
+        #
         ref_array_descr = self.cpu.arraydescrof(PinnedObjectTracker._ref_array_type)
         #
         vtable_descr = self.gc_ll_descr.fielddescr_vtable
@@ -125,3 +130,18 @@
             p1 = getarrayitem_gc(ConstPtr(ref_array_gcref), 0, descr=ref_array_descr)
             i0 = getfield_gc(p1, descr=pinned_obj_my_int_descr)
             """)
+
+    def test_simple_getfield_twice(self):
+        self.check_rewrite("""
+            []
+            i0 = getfield_gc(ConstPtr(pinned_obj_gcref), descr=pinned_obj_my_int_descr)
+            i1 = getfield_gc(ConstPtr(notpinned_obj_gcref), descr=notpinned_obj_my_int_descr)
+            i2 = getfield_gc(ConstPtr(pinned_obj_gcref), descr=pinned_obj_my_int_descr)
+            """, """
+            []
+            p1 = getarrayitem_gc(ConstPtr(ref_array_gcref), 0, descr=ref_array_descr)
+            i0 = getfield_gc(p1, descr=pinned_obj_my_int_descr)
+            i1 = getfield_gc(ConstPtr(notpinned_obj_gcref), descr=notpinned_obj_my_int_descr)
+            p2 = getarrayitem_gc(ConstPtr(ref_array_gcref), 1, descr=ref_array_descr)
+            i2 = getfield_gc(p2, descr=pinned_obj_my_int_descr)
+            """)


More information about the pypy-commit mailing list