More bug 460020.  When I is a subclass of int, disable the +I(whatever),
I(0) << whatever, I(0) >> whatever, I(whatever) << 0 and I(whatever) >> 0
optimizations.
diff --git a/Objects/intobject.c b/Objects/intobject.c
index 261edb8..c93b384 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -681,8 +681,12 @@
 static PyObject *
 int_pos(PyIntObject *v)
 {
-	Py_INCREF(v);
-	return (PyObject *)v;
+	if (PyInt_CheckExact(v)) {
+		Py_INCREF(v);
+		return (PyObject *)v;
+	}
+	else
+		return PyInt_FromLong(v->ob_ival);
 }
 
 static PyObject *
@@ -716,10 +720,8 @@
 		PyErr_SetString(PyExc_ValueError, "negative shift count");
 		return NULL;
 	}
-	if (a == 0 || b == 0) {
-		Py_INCREF(v);
-		return (PyObject *) v;
-	}
+	if (a == 0 || b == 0)
+		return int_pos(v);
 	if (b >= LONG_BIT) {
 		return PyInt_FromLong(0L);
 	}
@@ -737,10 +739,8 @@
 		PyErr_SetString(PyExc_ValueError, "negative shift count");
 		return NULL;
 	}
-	if (a == 0 || b == 0) {
-		Py_INCREF(v);
-		return (PyObject *) v;
-	}
+	if (a == 0 || b == 0)
+		return int_pos(v);
 	if (b >= LONG_BIT) {
 		if (a < 0)
 			a = -1;