2011/7/29 Vitja Makarov <vitja.maka...@gmail.com>: > 2011/7/29 Stefan Behnel <stefan...@behnel.de>: >> [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. >> > > There is entry.cf_unused flag it's set when the whole entry is not used. >
((6af313c...)) vitja@vitja-laptop:~/work/cython-vitek$ python cython.py -X warn.unused_arg=True test.pyx warning: test.pyx:2:19: Unused argument 'self' warning: test.pyx:2:25: Unused argument 'fn' warning: test.pyx:2:29: Unused argument 'exc' -- vitja. _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel