diff -r 20f18e5e8bfc Modules/_decimal/_decimal.c --- a/Modules/_decimal/_decimal.c Sat Jan 07 00:08:29 2017 +0100 +++ b/Modules/_decimal/_decimal.c Sat Jan 07 10:23:45 2017 +0200 @@ -518,9 +518,13 @@ getround(PyObject *v) } } for (i = 0; i < _PY_DEC_ROUND_GUARD; i++) { - if (PyUnicode_Compare(v, round_map[i]) == 0) { + int cmp = PyUnicode_Compare(v, round_map[i]); + if (cmp == 0) { return i; } + if (cmp < 0 && PyErr_Occurred()) { + return -1; + } } } diff -r 20f18e5e8bfc Modules/_pickle.c --- a/Modules/_pickle.c Sat Jan 07 00:08:29 2017 +0100 +++ b/Modules/_pickle.c Sat Jan 07 10:23:45 2017 +0200 @@ -1560,9 +1560,9 @@ memo_put(PicklerObject *self, PyObject * } static PyObject * -get_dotted_path(PyObject *obj, PyObject *name) { +get_dotted_path(PyObject *obj, PyObject *name) +{ _Py_static_string(PyId_dot, "."); - _Py_static_string(PyId_locals, ""); PyObject *dotted_path; Py_ssize_t i, n; @@ -1573,12 +1573,7 @@ get_dotted_path(PyObject *obj, PyObject assert(n >= 1); for (i = 0; i < n; i++) { PyObject *subpath = PyList_GET_ITEM(dotted_path, i); - PyObject *result = PyUnicode_RichCompare( - subpath, _PyUnicode_FromId(&PyId_locals), Py_EQ); - int is_equal = (result == Py_True); - assert(PyBool_Check(result)); - Py_DECREF(result); - if (is_equal) { + if (_PyUnicode_EqualToASCIIString(subpath, "")) { if (obj == NULL) PyErr_Format(PyExc_AttributeError, "Can't pickle local object %R", name); @@ -3549,12 +3544,10 @@ save_reduce(PicklerObject *self, PyObjec } else if (PyUnicode_Check(name)) { _Py_IDENTIFIER(__newobj_ex__); - use_newobj_ex = PyUnicode_Compare( - name, _PyUnicode_FromId(&PyId___newobj_ex__)) == 0; + use_newobj_ex = _PyUnicode_EqualToASCIIId(name, &PyId___newobj_ex__); if (!use_newobj_ex) { _Py_IDENTIFIER(__newobj__); - use_newobj = PyUnicode_Compare( - name, _PyUnicode_FromId(&PyId___newobj__)) == 0; + use_newobj = _PyUnicode_EqualToASCIIId(name, &PyId___newobj__); } } Py_XDECREF(name);