Author: Gregor Wegberg <[email protected]>
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)
+ """)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit