Commit dc55d715 authored by Barry Warsaw's avatar Barry Warsaw

PyInstance_DoBinOp(): When comparing the pointers, they must be cast

to integer types (i.e. Py_uintptr_t, our spelling of C9X's uintptr_t).
ANSI specifies that pointer compares other than == and != to
non-related structures are undefined.  This quiets an Insure
portability warning.
parent bc7c7f99
...@@ -1207,13 +1207,16 @@ PyInstance_DoBinOp(PyObject *v, PyObject *w, char *opname, char *ropname, ...@@ -1207,13 +1207,16 @@ PyInstance_DoBinOp(PyObject *v, PyObject *w, char *opname, char *ropname,
{ {
char buf[256]; char buf[256];
PyObject *result = NULL; PyObject *result = NULL;
if (halfbinop(v, w, opname, &result, thisfunc, 0) <= 0) if (halfbinop(v, w, opname, &result, thisfunc, 0) <= 0)
return result; return result;
if (halfbinop(w, v, ropname, &result, thisfunc, 1) <= 0) if (halfbinop(w, v, ropname, &result, thisfunc, 1) <= 0)
return result; return result;
/* Sigh -- special case for comparisons */ /* Sigh -- special case for comparisons */
if (strcmp(opname, "__cmp__") == 0) { if (strcmp(opname, "__cmp__") == 0) {
long c = (v < w) ? -1 : (v > w) ? 1 : 0; Py_uintptr_t iv = (Py_uintptr_t)v;
Py_uintptr_t iw = (Py_uintptr_t)w;
long c = (iv < iw) ? -1 : (iv > iw) ? 1 : 0;
return PyInt_FromLong(c); return PyInt_FromLong(c);
} }
sprintf(buf, "%s nor %s defined for these operands", opname, ropname); sprintf(buf, "%s nor %s defined for these operands", opname, ropname);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment