summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Dickinson <dickinsm@gmail.com>2010-06-05 12:14:43 (GMT)
committerMark Dickinson <dickinsm@gmail.com>2010-06-05 12:14:43 (GMT)
commite4b83e013ba8c2bda78163da38783f79b1a86079 (patch)
tree417f427bc5b3af9846782d891eeb52767f32f8ae
parente37d75fce22f6c216148102652db64744ac06a6e (diff)
downloadcpython-e4b83e013ba8c2bda78163da38783f79b1a86079.zip
cpython-e4b83e013ba8c2bda78163da38783f79b1a86079.tar.gz
cpython-e4b83e013ba8c2bda78163da38783f79b1a86079.tar.bz2
Issue #8627: Fix "XXX undetected error" from unchecked PyErr_WarnPy3k return.
This is just a quick fix: if the warning is turned into an exception, the exception simply gets ignored.
-rw-r--r--Misc/NEWS5
-rw-r--r--Objects/typeobject.c14
2 files changed, 14 insertions, 5 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index 3378c5d..8608d03 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -13,7 +13,10 @@ Core and Builtins
-----------------
- Issue #8627: Remove bogus "Overriding __cmp__ blocks inheritance of
- __hash__ in 3.x" warning.
+ __hash__ in 3.x" warning. Also fix "XXX undetected error" that
+ arises from the "Overriding __eq__ blocks inheritance ..." warning
+ when turned into an exception: in this case the exception simply
+ gets ignored.
- Issue #8748: Fix two issues with comparisons between complex and integer
objects. (1) The comparison could incorrectly return True in some cases
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 5767b87..b28ab4d 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -3869,10 +3869,16 @@ inherit_slots(PyTypeObject *type, PyTypeObject *base)
(base->tp_hash != PyObject_HashNotImplemented) &&
!OVERRIDES_HASH(type)) {
if (OVERRIDES_EQ(type)) {
- PyErr_WarnPy3k("Overriding "
- "__eq__ blocks inheritance "
- "of __hash__ in 3.x",
- 1);
+ if (PyErr_WarnPy3k("Overriding "
+ "__eq__ blocks inheritance "
+ "of __hash__ in 3.x",
+ 1) < 0)
+ /* XXX This isn't right. If the warning is turned
+ into an exception, we should be communicating
+ the error back to the caller, but figuring out
+ how to clean-up in that case is tricky. See
+ issue 8627 for more. */
+ PyErr_Clear();
}
}
}