[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
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to