If the GC is enabled then don't use the ob_type pointer to create a list
of trash objects.  Use the gc_prev pointer instead.
diff --git a/Objects/object.c b/Objects/object.c
index 6ec8c8b..396f734 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -2037,6 +2037,7 @@
 void
 _PyTrash_deposit_object(PyObject *op)
 {
+#ifndef WITH_CYCLE_GC
 	int typecode;
 
 	if (PyTuple_Check(op))
@@ -2054,8 +2055,11 @@
 		return; /* pacify compiler -- execution never here */
 	}
 	op->ob_refcnt = typecode;
-
 	op->ob_type = (PyTypeObject*)_PyTrash_delete_later;
+#else
+	assert (_Py_AS_GC(op)->gc.gc_next == NULL);
+	_Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later;
+#endif
 	_PyTrash_delete_later = op;
 }
 
@@ -2064,6 +2068,8 @@
 {
 	while (_PyTrash_delete_later) {
 		PyObject *shredder = _PyTrash_delete_later;
+
+#ifndef WITH_CYCLE_GC
 		_PyTrash_delete_later = (PyObject*) shredder->ob_type;
 
 		switch (shredder->ob_refcnt) {
@@ -2083,6 +2089,11 @@
 			shredder->ob_type = &PyTraceBack_Type;
 			break;
 		}
+#else
+		_PyTrash_delete_later =
+			(PyObject*) _Py_AS_GC(shredder)->gc.gc_prev;
+#endif
+
 		_Py_NewReference(shredder);
 
 		++_PyTrash_delete_nesting;