Issue #5211: Complete removal of implicit coercions for the complex
type.  Coercion for arithmetic operations was already removed in
r78280, but that commit didn't remove coercion for rich comparisons.
diff --git a/Lib/test/test_complex.py b/Lib/test/test_complex.py
index fc47b23..f27593e 100644
--- a/Lib/test/test_complex.py
+++ b/Lib/test/test_complex.py
@@ -115,6 +115,19 @@
     def test_coerce(self):
         self.assertRaises(OverflowError, complex.__coerce__, 1+1j, 1L<<10000)
 
+    def test_no_implicit_coerce(self):
+        # Python 2.7 removed implicit coercion from the complex type
+        class A(object):
+            def __coerce__(self, other):
+                raise RuntimeError
+            __hash__ = None
+            def __cmp__(self, other):
+                return -1
+
+        a = A()
+        self.assertRaises(TypeError, lambda: a + 2.0j)
+        self.assertTrue(a < 2.0j)
+
     def test_richcompare(self):
         self.assertRaises(OverflowError, complex.__eq__, 1+1j, 1L<<10000)
         self.assertEqual(complex.__lt__(1+1j, None), NotImplemented)
diff --git a/Misc/NEWS b/Misc/NEWS
index 17f7164..e63d905 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@
 Core and Builtins
 -----------------
 
+- Issue #5211: Implicit coercion for the complex type is now completely
+  removed.  (Coercion for arithmetic operations was already removed in 2.7
+  alpha 4, but coercion for rich comparisons was accidentally left in.)
+
 - Issue #3798: Write sys.exit() message to sys.stderr to use stderr encoding
   and error handler, instead of writing to the C stderr file in utf-8
 
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index 5f26a6a..3577a29 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -787,25 +787,8 @@
     Py_complex i, j;
     PyObject *res;
 
-    c = PyNumber_CoerceEx(&v, &w);
-    if (c < 0)
-        return NULL;
-    if (c > 0) {
-        Py_INCREF(Py_NotImplemented);
-        return Py_NotImplemented;
-    }
-    /* Make sure both arguments are complex. */
-    if (!(PyComplex_Check(v) && PyComplex_Check(w))) {
-        Py_DECREF(v);
-        Py_DECREF(w);
-        Py_INCREF(Py_NotImplemented);
-        return Py_NotImplemented;
-    }
-
-    i = ((PyComplexObject *)v)->cval;
-    j = ((PyComplexObject *)w)->cval;
-    Py_DECREF(v);
-    Py_DECREF(w);
+    TO_COMPLEX(v, i);
+    TO_COMPLEX(w, j);
 
     if (op != Py_EQ && op != Py_NE) {
         PyErr_SetString(PyExc_TypeError,