[Python-Dev] Py_DECREF causes spurious gcc warning

Tim Peters tim.one at comcast.net
Wed Dec 17 19:24:02 EST 2003

[Edward C. Jones]
> I use Gentoo 1.4 Linux with gcc 3.2.2. The C program given below gives
> the following compiler message:
> silly.c: In function `silly':
> silly.c:5: warning: suggest explicit braces to avoid ambiguous `else'
> I doubt if there is any bug in Py_DECREF. But would it be possible to
> jiggle the Py_DECREF macros to suppress this message? In my real code,
> I, of course, just added braces.

Sounds good to me (i.e., add the braces and be done with it).  It's a silly
warning because Py_DECREF expands to a two-branch if/else, and there is no
ambiguity in reality.  It would be a refreshing change if someone suggested
that gcc change instead <wink>.

[Timothy Delany]
> If you mean you changed it to:
> static PyObject* silly(PyObject* obj, PyObject *args)
> {
>     if (1)
>     {
>         Py_DECREF(Py_None);
>     }
> then I would say that's the right thing to do - all the
> time, in all code.

[Skip Montanaro]
> Then you also agree we should bracify the Py_*REF macros, right?
> <wink>

That can't work, alas -- the macro has no idea whether curly braces are
syntactically legal in the context it's invoked in.  Timmy *can* know that,
and insert them or not accordingly.

This is what leads to the bletcherous

    do {
        the real macro guts go here
    } while(0)

form of macro definition.  Py_DECREF could be rewritten in that form -- but
I've puked enough for one day <splat>.

More information about the Python-Dev mailing list