[Cython] Bug in Cython producing incorrect C code

Vitja Makarov vitja.makarov at gmail.com
Tue Jan 24 19:30:43 CET 2012


2012/1/24 Robert Bradshaw <robertwb at math.washington.edu>:
> On Tue, Jan 24, 2012 at 6:09 AM, Vitja Makarov <vitja.makarov at gmail.com> wrote:
>> 2012/1/24 mark florisson <markflorisson88 at gmail.com>:
>>> On 24 January 2012 11:37, Konrad Hinsen <konrad.hinsen at fastmail.net> wrote:
>>>> Compiling the attached Cython file produced the attached C file which
>>>> has errors in lines 532-534:
>>>>
>>>>  __pyx_v_self->xx = None;
>>>>  __pyx_v_self->yy = None;
>>>>  __pyx_v_self->zz = None;
>>>>
>>>> There is no C symbol "None", so this doesn't compile.
>>>>
>>>> I first noticed the bug in Cython 0.15, but it's still in the latest
>>>> revision from Github.
>>>>
>>>> Konrad.
>>>>
>>>> _______________________________________________
>>>> cython-devel mailing list
>>>> cython-devel at python.org
>>>> http://mail.python.org/mailman/listinfo/cython-devel
>>>>
>>>
>>> Hm, it seems the problem is that the call to the builtin float results
>>> in SimpleCallNode being replaced with PythonCApiNode, which then
>>> generates the result code, but the list of coerced nodes are
>>> CloneNodes of the original rhs, and CloneNode does not generate the
>>> result code of the original rhs (i.e. allocate and assign to a temp),
>>> which results in a None result.
>>>
>>> Maybe CascadedAssignmentNode should replace CloneNode.arg with the
>>> latest self.rhs in generate_assignment_code? I'm not entirely sure.

Seems like a hack to me.

>>
>>
>> May be it's better to run OptimizeBuiltinCalls before
>> AnalyseExpressionsTransform?
>
> Doesn't OptimizeBuiltinCalls take advantage of type information?

Yes, it does :(

So as Mark said the problem is CascadedAssignmentNode.coerced_rhs_list
is created before rhs is updated.



-- 
vitja.


More information about the cython-devel mailing list