Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r914:5d777b5b2815
Date: 2014-03-01 20:53 +0100
http://bitbucket.org/pypy/stmgc/changeset/5d777b5b2815/

Log:    Fix, but a failing test.

diff --git a/c7/stm/gcpage.c b/c7/stm/gcpage.c
--- a/c7/stm/gcpage.c
+++ b/c7/stm/gcpage.c
@@ -277,8 +277,10 @@
         tl = tl->next;
     } while (tl != stm_all_thread_locals);
 
-    LIST_FOREACH_R(testing_prebuilt_objs, object_t * /*item*/,
-                   mark_record_trace(&item));
+    if (testing_prebuilt_objs != NULL) {
+        LIST_FOREACH_R(testing_prebuilt_objs, object_t * /*item*/,
+                       mark_record_trace(&item));
+    }
 }
 
 static void mark_visit_all_objects(void)
diff --git a/c7/test/support.py b/c7/test/support.py
--- a/c7/test/support.py
+++ b/c7/test/support.py
@@ -183,7 +183,7 @@
 
 void _set_ptr(object_t *obj, int n, object_t *v)
 {
-    int nrefs = ((myobj_t*)obj)->type_id - 421420;
+    long nrefs = (long)((myobj_t*)obj)->type_id - 421420;
     assert(n < nrefs);
 
     stm_char *field_addr = ((stm_char*)obj);
@@ -195,7 +195,7 @@
 
 object_t * _get_ptr(object_t *obj, int n)
 {
-    int nrefs = ((myobj_t*)obj)->type_id - 421420;
+    long nrefs = (long)((myobj_t*)obj)->type_id - 421420;
     assert(n < nrefs);
 
     stm_char *field_addr = ((stm_char*)obj);
@@ -300,10 +300,12 @@
 
 def stm_set_char(obj, c, offset=HDR):
     stm_write(obj)
+    assert HDR <= offset < stm_get_obj_size(obj)
     stm_get_real_address(obj)[offset] = c
 
 def stm_get_char(obj, offset=HDR):
     stm_read(obj)
+    assert HDR <= offset < stm_get_obj_size(obj)
     return stm_get_real_address(obj)[offset]
 
 def stm_get_real_address(obj):
diff --git a/c7/test/test_gcpage.py b/c7/test/test_gcpage.py
--- a/c7/test/test_gcpage.py
+++ b/c7/test/test_gcpage.py
@@ -137,6 +137,7 @@
         self.start_transaction()
         x = stm_allocate(5000)
         stm_set_char(x, 'A')
+        stm_set_char(x, 'a', 4999)
         self.push_root(x)
         self.commit_transaction()
         assert lib._stm_total_allocated() == 5000 + LMO
@@ -146,15 +147,37 @@
         self.push_root(x)
         assert lib._stm_total_allocated() == 5000 + LMO
         stm_set_char(x, 'B')
+        stm_set_char(x, 'b', 4999)
         assert lib._stm_total_allocated() == 5000 + LMO + 2 * 4096  # 2 pages
         stm_major_collect()
 
-        assert stm_get_char(x) == 'B'
+        assert stm_get_char(x)       == 'B'
+        assert stm_get_char(x, 4999) == 'b'
 
         self.switch(1)
         self.start_transaction()
-        assert stm_get_char(x) == 'A'
+        assert stm_get_char(x)       == 'A'
+        assert stm_get_char(x, 4999) == 'a'
 
         self.switch(0)
-        assert stm_get_char(x) == 'B'
+        assert stm_get_char(x)       == 'B'
+        assert stm_get_char(x, 4999) == 'b'
         assert lib._stm_total_allocated() == 5000 + LMO + 2 * 4096  # 2 pages
+
+    def test_trace_correct_version_of_overflow_objects_1(self, size=32):
+        self.start_transaction()
+        #
+        self.switch(1)
+        self.start_transaction()
+        x = stm_allocate(size)
+        stm_set_char(x, 'E', size - 1)
+        self.push_root(x)
+        #
+        self.switch(0)
+        stm_major_collect()
+        #
+        self.switch(1)
+        assert stm_get_char(x, size - 1) == 'E'
+
+    def test_trace_correct_version_of_overflow_objects_2(self):
+        self.test_trace_correct_version_of_overflow_objects_1(size=5000)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to