]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
PyInstance_DoBinOp(): When comparing the pointers, they must be cast
authorBarry Warsaw <barry@python.org>
Fri, 18 Aug 2000 04:57:32 +0000 (04:57 +0000)
committerBarry Warsaw <barry@python.org>
Fri, 18 Aug 2000 04:57:32 +0000 (04:57 +0000)
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.

Objects/classobject.c

index 66d108011f22cb35744cc5d4d5c1a64446b4342a..f0f4438e87103b35d14175b3970f38820f59fb3c 100644 (file)
@@ -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);