From: Barry Warsaw Date: Fri, 18 Aug 2000 04:57:32 +0000 (+0000) Subject: PyInstance_DoBinOp(): When comparing the pointers, they must be cast X-Git-Tag: v2.0b1~382 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dc55d715bbe23ccda3942da667211ff796f31ed2;p=thirdparty%2FPython%2Fcpython.git 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. --- diff --git a/Objects/classobject.c b/Objects/classobject.c index 66d108011f22..f0f4438e8710 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -1207,13 +1207,16 @@ PyInstance_DoBinOp(PyObject *v, PyObject *w, char *opname, char *ropname, { char buf[256]; PyObject *result = NULL; + if (halfbinop(v, w, opname, &result, thisfunc, 0) <= 0) return result; if (halfbinop(w, v, ropname, &result, thisfunc, 1) <= 0) return result; /* Sigh -- special case for comparisons */ 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); } sprintf(buf, "%s nor %s defined for these operands", opname, ropname);