[Cython] 'local variable referenced before assignment' warnings

Robert Bradshaw robertwb at math.washington.edu
Fri Sep 23 07:02:18 CEST 2011


On Thu, Sep 22, 2011 at 9:36 PM, Vitja Makarov <vitja.makarov at gmail.com> wrote:
> 2011/9/23 Robert Bradshaw <robertwb at math.washington.edu>:
>> On Thu, Sep 22, 2011 at 5:08 AM, Vitja Makarov <vitja.makarov at gmail.com> wrote:
>>> 2011/9/22 Robert Bradshaw <robertwb at math.washington.edu>:
>>>> On Wed, Sep 21, 2011 at 1:20 AM,  <robert.rex at 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.

- Robert


More information about the cython-devel mailing list