proxy_compare():  Make sure that we unwrap both objects being compared if
both are proxy objects.
diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index 9a94fd4..2e02cf2 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -220,6 +220,13 @@
             o = PyWeakref_GET_OBJECT(o); \
         }
 
+#define UNWRAP_I(o) \
+        if (PyWeakref_CheckProxy(o)) { \
+            if (!proxy_checkref((PyWeakReference *)o)) \
+                return -1; \
+            o = PyWeakref_GET_OBJECT(o); \
+        }
+
 #define WRAP_UNARY(method, generic) \
     static PyObject * \
     method(PyObject *proxy) { \
@@ -284,11 +291,11 @@
 }
 
 static int
-proxy_compare(PyWeakReference *proxy, PyObject *v)
+proxy_compare(PyObject *proxy, PyObject *v)
 {
-    if (!proxy_checkref(proxy))
-        return -1;
-    return PyObject_Compare(PyWeakref_GET_OBJECT(proxy), v);
+    UNWRAP_I(proxy);
+    UNWRAP_I(v);
+    return PyObject_Compare(proxy, v);
 }
 
 /* number slots */
@@ -451,7 +458,7 @@
     (printfunc)proxy_print,     /*tp_print*/
     0,				/*tp_getattr*/
     0, 				/*tp_setattr*/
-    (cmpfunc)proxy_compare,	/*tp_compare*/
+    proxy_compare,		/*tp_compare*/
     (unaryfunc)proxy_repr,	/*tp_repr*/
     &proxy_as_number,		/*tp_as_number*/
     &proxy_as_sequence,		/*tp_as_sequence*/
@@ -482,7 +489,7 @@
     (printfunc)proxy_print,     /*tp_print*/
     0,				/*tp_getattr*/
     0, 				/*tp_setattr*/
-    (cmpfunc)proxy_compare,	/*tp_compare*/
+    proxy_compare,		/*tp_compare*/
     (unaryfunc)proxy_repr,	/*tp_repr*/
     &proxy_as_number,		/*tp_as_number*/
     &proxy_as_sequence,		/*tp_as_sequence*/