[Cython] GCC 4.6 unused-but-set-variable warnings

Stefan Behnel stefan_ml at behnel.de
Fri Jul 29 07:06:20 CEST 2011


[moving this here from cython-users]

Nikolaus Rath, 13.06.2011 16:59:
> Stefan Behnel writes:
>> Nikolaus Rath, 13.06.2011 01:18:
>>> Stefan Behnel writes:
>>>> Nikolaus Rath, 03.06.2011 23:24:
>>>>> Cython 0.14 generated code triggers lots of  unused-but-set-variable
>>>>> warnings (which are new in GCC 4.6).
>>>>
>>>> Hmm, that's annoying. We actually generate a lot of useless "dangling
>>>> reset to 0" statements for safety (and also as a bit of a "now unused"
>>>> hint to the C compiler).
>>>>
>>>> We could get rid of most of them based on control flow analysis, but I
>>>> actually like having them there, just in case we accidentally generate
>>>> broken code at some point. A NULL pointer is a lot safer than an
>>>> arbitrarily dangling address, especially when it comes to CPython heap
>>>> allocated memory (which doesn't necessarily get freed, so you may not
>>>> get a quick segfault but a read from dead memory).
>>>
>>> I don't quite understand. The way to get rid of the warnings is to
>>> remove the unnecessary variables. How can this result in a dangling
>>> address? You'll get a syntax error from gcc about using an undeclared
>>> variable.
>>
>> Ah, sorry. I misunderstood the meaning of the warning message as
>> pointing at unnecessary assignments in general. Could you post a C
>> code snippet (and the corresponding Cython code) that triggers this? I
>> don't have gcc 4.6 available for testing.
>
> Sure. It's apparently triggered by unused function arguments:
>
> $ cat test.pyx
> class Operations(object):
>      def handle_exc(self, fn, exc):
>          pass
>
> $ cython test.pyx
>
> $ gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c test.c -o test.o -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -Werror -Wall -Wextra -Wconversion -Wno-unused-parameter -Wno-sign-conversion -fno-strict-aliasing test.c:
> test.c:454:13: warning: variable ‘__pyx_v_exc’ set but not used [-Wunused-but-set-variable]
> test.c:453:13: warning: variable ‘__pyx_v_fn’ set but not used [-Wunused-but-set-variable]
> test.c:452:13: warning: variable ‘__pyx_v_self’ set but not used [-Wunused-but-set-variable]

http://trac.cython.org/cython_trac/ticket/704

I think this is something that the control flow analysis could deal with. 
Basically, every parameter that turns out to be unused in the function (and 
this most likely only happens with parameters) could be ignored, unless it 
requires a type conversion with potential side effects. In that (unlikely) 
case, we could still drop the final assignment to the variable itself.

Stefan


More information about the cython-devel mailing list