make_pair(): 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.
This commit is contained in:
Barry Warsaw 2000-08-18 05:01:19 +00:00
parent 67c1a04bbb
commit 9d23a4eb03
1 changed files with 6 additions and 2 deletions

View File

@ -371,12 +371,14 @@ static PyObject *
make_pair(PyObject *v, PyObject *w)
{
PyObject *pair;
Py_uintptr_t iv = (Py_uintptr_t)v;
Py_uintptr_t iw = (Py_uintptr_t)w;
pair = PyTuple_New(2);
if (pair == NULL) {
return NULL;
}
if (v <= w) {
if (iv <= iw) {
PyTuple_SET_ITEM(pair, 0, PyLong_FromVoidPtr((void *)v));
PyTuple_SET_ITEM(pair, 1, PyLong_FromVoidPtr((void *)w));
} else {
@ -487,7 +489,9 @@ PyObject_Compare(PyObject *v, PyObject *w)
return strcmp(vname, wname);
}
if (vtp->tp_compare == NULL) {
return (v < w) ? -1 : 1;
Py_uintptr_t iv = (Py_uintptr_t)v;
Py_uintptr_t iw = (Py_uintptr_t)w;
return (iv < iw) ? -1 : 1;
}
_PyCompareState_nesting++;
if (_PyCompareState_nesting > NESTING_LIMIT