On 23 September 2011 06:02, Robert Bradshaw <rober...@math.washington.edu> wrote: > On Thu, Sep 22, 2011 at 9:36 PM, Vitja Makarov <vitja.maka...@gmail.com> > wrote: >> 2011/9/23 Robert Bradshaw <rober...@math.washington.edu>: >>> On Thu, Sep 22, 2011 at 5:08 AM, Vitja Makarov <vitja.maka...@gmail.com> >>> wrote: >>>> 2011/9/22 Robert Bradshaw <rober...@math.washington.edu>: >>>>> On Wed, Sep 21, 2011 at 1:20 AM, <robert....@exasol.com> wrote: >>>>>> Hi Robert, >>>>>> >>>>>> Robert Bradshaw wrote: >>>>>>> >>>>>>> The warning seem correct to me, or is foo actually modifying the >>>>>>> values of cya and cyb? (I suppose this could be possible by taking the >>>>>>> address of the "passed by reference" arguments, but would seem like a >>>>>>> *very* poor API design.) >>>>>> >>>>>> thanks for your fast answer! What made me came up with this issue is >>>>>> that GCC/C++ will not complain in similar situations in C++ code (and >>>>>> assumes foo() to initialize/change the value of cya/cyb). Thus, there >>>>>> is an (arguable) difference in C++ compiler/Cython warnings. >>>>> >>>>> Yes, in C++ the called function can modify values passed by reference, >>>>> so we need to add this exception to Cython. >>>>> >>>> >>>> That could be hard because we can not always resolve function to check >>>> its args at create-control-flow stage. >>> >>> Doesn't this always happen after declaration analysis? >>> >> >> Sure. But before analyse expressions, so you have to manually lookup >> entries for names and attributes. > > Ah, yes. > >> I see two cases here: global function call and method call. Both are >> SimpleCallNodes. > > Yep, and the function could be an arbitrary expression... Ugly.
As a simple hack, couldn't you in case of a SimpleCallNode where the function is a NameNode check if the arguments are passed by reference, and if so not issue the warning. If the callnode.function is an arbitrary expression (like casting a pointer to such a function), then you just issue the warning. Then you will cover probably at least 95% of the cases. > - Robert > _______________________________________________ > cython-devel mailing list > cython-devel@python.org > http://mail.python.org/mailman/listinfo/cython-devel > _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel