As per further discussion, re-enable the typeobject.c guard for picklability.
upstreams such as Cython will have to adjust.
diff --git a/Misc/NEWS b/Misc/NEWS
index 593ed24..e062d91 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,9 +10,6 @@
 Core and Builtins
 -----------------
 
-- Issue #22995: [UPDATE] Comment out the one of the pickleability tests in
-  _PyObject_GetState() due to regressions observed in Cython-based projects.
-
 - Issue #25961: Disallowed null characters in the type name.
 
 - Issue #25973: Fix segfault when an invalid nonlocal statement binds a name
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index f92f1e9..db15cf6 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -3872,14 +3872,6 @@
         }
 
         assert(slotnames == Py_None || PyList_Check(slotnames));
-#if 0
-        /* 2016-01-11 barry - This clause breaks at least three packages which
-           rely on Cython: kivy, pysam, and s3ql.  Cython may be doing
-           something funny under the hood, but as this is clearly a regression
-           and the rationale for this prohibition is suspect, I am commenting
-           this out.  Perhaps it should just be removed.  See issue #22995 for
-           details.
-        */
         if (required) {
             Py_ssize_t basicsize = PyBaseObject_Type.tp_basicsize;
             if (obj->ob_type->tp_dictoffset)
@@ -3897,7 +3889,6 @@
                 return NULL;
             }
         }
-#endif
 
         if (slotnames != Py_None && Py_SIZE(slotnames) > 0) {
             PyObject *slots;