PyErr_NoMemory(): If the pre-instantiated memory exception is non-null
(PyExc_MemoryErrorInst) raise this instead of PyExc_MemoryError.  This
only happens when exception classes are enabled (e.g. when Python is
started with -X).
diff --git a/Python/errors.c b/Python/errors.c
index 48649fd..91c543d 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -256,7 +256,15 @@
 PyObject *
 PyErr_NoMemory()
 {
-	PyErr_SetNone(PyExc_MemoryError);
+	/* raise the pre-allocated instance if it still exists */
+	if (PyExc_MemoryErrorInst)
+		PyErr_SetObject(PyExc_MemoryError, PyExc_MemoryErrorInst);
+	else
+		/* this will probably fail since there's no memory and hee,
+		   hee, we have to instantiate this class
+		*/
+		PyErr_SetNone(PyExc_MemoryError);
+
 	return NULL;
 }