diff -r ed9cabce9c38 Lib/test/test_bool.py --- a/Lib/test/test_bool.py Sun Aug 21 16:09:27 2016 -0400 +++ b/Lib/test/test_bool.py Mon Aug 22 13:42:03 2016 +0800 @@ -96,6 +96,13 @@ self.assertEqual(False/1, 0) self.assertIsNot(False/1, False) + self.assertEqual(True%1, 0) + self.assertIsNot(True%1, False) + self.assertEqual(True%2, 1) + self.assertIsNot(True%2, True) + self.assertEqual(False%1, 0) + self.assertIsNot(False%1, False) + for b in False, True: for i in 0, 1, 2: self.assertEqual(b**i, int(b)**i) diff -r ed9cabce9c38 Objects/longobject.c --- a/Objects/longobject.c Sun Aug 21 16:09:27 2016 -0400 +++ b/Objects/longobject.c Mon Aug 22 13:42:03 2016 +0800 @@ -2458,8 +2458,11 @@ *pdiv = (PyLongObject*)PyLong_FromLong(0); if (*pdiv == NULL) return -1; - Py_INCREF(a); - *prem = (PyLongObject *) a; + *prem = (PyLongObject *)PyNumber_Long((PyObject *)a); + if (*prem == NULL) { + Py_CLEAR(*pdiv); + return -1; + } return 0; } if (size_b == 1) {