As discussed on python-dev, silence three gcc-4.0.x warnings, using assert()
authorThomas Wouters <thomas@python.org>
Wed, 1 Feb 2006 21:32:04 +0000 (21:32 +0000)
committerThomas Wouters <thomas@python.org>
Wed, 1 Feb 2006 21:32:04 +0000 (21:32 +0000)
to protect against actual uninitialized usage.

Objects/longobject.c: In function ‘PyLong_AsDouble’:
Objects/longobject.c:655: warning: ‘e’ may be used uninitialized in this function

Objects/longobject.c: In function ‘long_true_divide’:
Objects/longobject.c:2263: warning: ‘aexp’ may be used uninitialized in this function
Objects/longobject.c:2263: warning: ‘bexp’ may be used uninitialized in this function

Objects/longobject.c

index 6f98d448dc96516dfadc8287337e2e5ca5feae10..32f79580b3205ec5213fee532e6cdb41c5d68bfd 100644 (file)
@@ -652,7 +652,7 @@ _PyLong_AsScaledDouble(PyObject *vv, int *exponent)
 double
 PyLong_AsDouble(PyObject *vv)
 {
-       int e;
+       int e = -1;
        double x;
 
        if (vv == NULL || !PyLong_Check(vv)) {
@@ -662,6 +662,9 @@ PyLong_AsDouble(PyObject *vv)
        x = _PyLong_AsScaledDouble(vv, &e);
        if (x == -1.0 && PyErr_Occurred())
                return -1.0;
+       /* 'e' initialized to -1 to silence gcc-4.0.x, but it should be
+          set correctly after a successful _PyLong_AsScaledDouble() call */
+       assert(e >= 0);
        if (e > INT_MAX / SHIFT)
                goto overflow;
        errno = 0;
@@ -2260,7 +2263,7 @@ long_true_divide(PyObject *v, PyObject *w)
 {
        PyLongObject *a, *b;
        double ad, bd;
-       int aexp, bexp, failed;
+       int failed, aexp = -1, bexp = -1;
 
        CONVERT_BINOP(v, w, &a, &b);
        ad = _PyLong_AsScaledDouble((PyObject *)a, &aexp);
@@ -2270,6 +2273,10 @@ long_true_divide(PyObject *v, PyObject *w)
        Py_DECREF(b);
        if (failed)
                return NULL;
+       /* 'aexp' and 'bexp' were initialized to -1 to silence gcc-4.0.x,
+          but should really be set correctly after sucessful calls to
+          _PyLong_AsScaledDouble() */
+       assert(aexp >= 0 && bexp >= 0);
 
        if (bd == 0.0) {
                PyErr_SetString(PyExc_ZeroDivisionError,